最近的一个项目中,我用到 Laravel5 的观察者模式,维护一个日志表,下面我大概说明一下场景和存在的问题。
服务提供者:app\Providers\ObserverServiceProvider.php
boot方法:XdFlowModel::observe(XdFlowObserver::class);
XdFlowObserver.php文件中,定义created和updated方法,用于监听XdFlowModel模型的变化。
created方法能监听到create()事件,但是updated监听不到update()方法。
后来经过多次测试,发现在更新XdFlowModel模型数据的时候,使用的是类似下面这种方法:XdFlowModel::where('id',100)->update(['status'=>1]);
这种写法其实是:Database Query,我们的观察者只能监听 ORM Query,所以修改方案如下:XdFlowModel::where('id',100)->first()->update(['status'=>1]);
或者$model = XdFlowModel::where('id',100)->first();
$model->update(['status'=>1]);
$model->save();
两种修改方案的原理是一样的,都是使用了 ORM Query,进而就能监听了。