最近的一个项目中,我用到 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,进而就能监听了。

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/blog/post/14