防止更新或保存 Laravel 模型

36 篇文章 0 订阅
10 篇文章 0 订阅

例如,创建模型后,我不希望任何人能够再次更新该记录。相反,它应该被全新的记录覆盖并存档。

这是一个简单的特征,您可以在模型上使用它来禁用更新:

trait PreventsUpdating
{
    public static function bootPreventsUpdating()
    {
        static::updating(function (Model $model) {
            return false;
        });
    }
}

只需在您的模型上使用它,您将无法再更新它。

我们可以更进一步,使其更具可重用性和 DRY-er。

trait PreventsModelEvents
{
    public static function bootPreventsModelEvents()
    {
        foreach (static::$prevents as $event) {
            static::{$event}(function (Model $model) {
                return false;
            });
        }
    }
}

现在,当我们想在模型上使用它时,我们可以这样做:

class User extends Model
{
    use PreventsModelEvents;

    protected static $prevents = ['updating'];
}

当我们尝试更新User模型时,它将停止并返回 false。这也可以应用于其他事件,例如savingcreating

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Laravel 模型数据更新后,如果你的应用程序中使用了缓存来提高性能,那么你可能需要在更新模型更新缓存。这可以通过在模型的 `saved` 事件中实现来完成。 在 `saved` 事件中,可以通过 `cache` 函数来更新缓存。例如,如果你有一个缓存了模型数据的缓存键名为 `my_model_cache_key`,那么可以在 `saved` 事件中更新该缓存: ```php class MyModel extends Model { protected static function boot() { parent::boot(); static::saved(function ($model) { // 更新模型缓存 Cache::put('my_model_cache_key', $model, 60); }); } } ``` 在上面的例子中,当模型更新后,会触发 `saved` 事件,该事件会将模型作为参数传递给回调函数。在回调函数中,通过 `Cache::put` 方法来更新缓存,将模型数据存储到缓存中。 需要注意的是,如果你在应用程序中使用了缓存,那么你需要在更新模型的操作之前清除缓存,否则更新后的数据可能无法立即反映在你的应用程序中。你可以在模型的 `deleting` 事件中清除缓存,如下所示: ```php class MyModel extends Model { protected static function boot() { parent::boot(); static::deleting(function ($model) { // 删除模型缓存 Cache::forget('my_model_cache_key'); }); } } ``` 在上面的例子中,当模型被删除时,会触发 `deleting` 事件,该事件会将模型作为参数传递给回调函数。在回调函数中,通过 `Cache::forget` 方法来清除缓存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rorg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值