Laravel如何自定义模型updated事件,按更新字段传递不同参数?
实现方案
Laravel Eloquent 内置了isDirty()方法,可直接检测指定字段是否在本次更新中被修改,直接在updated事件回调中调用该方法判断即可。
改造后的完整代码
public static function boot() { parent::boot(); self::created(function ($model) { /** @var self $model */ $model->clearCache(); }); self::updated(function ($model) { /** @var self $model */ // 检测text字段是否被修改,多个字段可以传数组:->isDirty(['text', '其他字段1', '其他字段2']) $needRefresh = $model->isDirty('text') ? 1 : 0; $model->clearCache($needRefresh); }); self::deleted(function ($model) { /** @var self $model */ $model->clearCache(); }); }
补充说明
- 如果需要同时判断多个指定字段,只要把字段名以数组形式传入
isDirty()即可,只要任意一个字段被修改就会返回true - 如果需要排除字段更新时触发特殊逻辑,可以反过来用
!$model->isDirty('排除的字段')做判断
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

