Laravel Eloquent:模型监听器中判断某字段是否更改
在Laravel的Eloquent模型中,你可以使用模型监听器来检测字段是否有变化。你需要定义一个模型观察者类,并在模型中注册它。以下是如何实现的示例:
- 创建一个模型监听器类:
use Illuminate\Support\Facades\Cache;
class MyModelObserver
{
public function updated(MyModel $model)
{
$original = Cache::get('my_model_' . $model->id);
if ($original) {
$changed = array_diff($model->getAttributes(), $original);
if (isset($changed['my_field'])) {
// 'my_field' 字段已变更
// 你的逻辑代码
}
}
}
}
- 在你的模型中注册这个监听器:
class MyModel extends Model
{
public static function boot()
{
parent::boot();
static::observe(new MyModelObserver());
}
// 其他模型方法
}
- 在更新模型之前,先将旧的模型属性存储在缓存中:
$model = MyModel::find($id);
Cache::put('my_model_' . $model->id, $model->getAttributes(), $ttl);
// 然后更新模型...
$model->update(['my_field' => 'new_value']);
请注意,这个示例使用了缓存来存储旧的模型属性。你可以根据实际情况选择合适的存储方式来保存旧的字段值。
评论已关闭