1.先创建一个 App\Observers 文件夹,
2.然后创建想要操作的模型对应的 observer,比如说创建一个 AgentLogsObservers
// 为 AgentLogs 模型注册观察者
AgentLogs::observe(AgentLogsObservers::class);
注意:(别忘了引入 model,做完这些我们就可以各种操作了。)
观察者方法有很多比如:
retrieved, #获取到模型实例后触发
creating, #创建过程前 * 常用
created, #创建成功后 * 常用
updating, #更新过程前 * 常用
updated, #更新成功后 * 常用
saving, #代表这两个方法的集合creating,updating * 常用
saved, #代表这两个方法的集合created,updated * 常用
deleting, #删除过程前 * 常用
deleted, #删除过程后 * 常用
restoring, #恢复软删除记录前触发
restored, #恢复软删除记录后触发
/**
* 监听修改事件.
*
* @param \App\Models\Mall\AgentLogs $agentLogs
* @return void
*/
public function saved(AgentLogs $agentLogs){
ownLogs('observers.log','观察者-saved 收到执行通知 执行完毕!');
}
public function updated(AgentLogs $agentLogs){
ownLogs('observers.log','观察者-updated 收到执行通知 执行完毕!');
}
原理:
当模型已存在,非新建时,事件触发顺序如下:
saving -> updating -> updated -> saved
当模型不存在,即需要新增时,事件触发顺序如下:
saving -> creating -> created -> saved
这里我只测试 用save()方法去修改一条记录,如下图代码:
日志输出结果:
从下图可以发现:一个save()方法执行成功的话,会影响updated 和 saved,并且是先触发updated事件再触发saved事件
刚好印证了上面的官方事件触发顺序:saving -> updating -> updated -> saved
所以实际使用观察者的时候二选一即可,千万别两个事件重复交叉了