Laravel 模型事件已经监听方式大全
顺其自然只是无能为力的另一种说法。
Eloquent 模型事件和监听方式大全
所有支持的模型事件
- retrieved:获取到模型实例后触发
- creating:插入到数据库前触发
- created:插入到数据库后触发
- updating:更新到数据库前触发
- updated:更新到数据库后触发
- saving:保存到数据库前触发(插入/更新之前,无论插入还是更新都会触发)
- saved:保存到数据库后触发(插入/更新之后,无论插入还是更新都会触发)
- deleting:从数据库删除记录前触发
- deleted:从数据库删除记录后触发
- restoring:恢复软删除记录前触发
- restored:恢复软删除记录后触发
注:批量更新时不会触发相应事件,因为是直接走查询构建器完成的,绕过了模型方法
1、通过静态方法监听模型事件
1 // app/Providers/EventServiceProvider.php
2
3 public function boot()
4 {
5 parent::boot();
6
7 // 监听模型获取事件
8 User::retrieved(function ($user) {
9 Log::info('从模型中获取用户[' . $user->id . ']:' . $user->name);
10 });
11 }
2、通过订阅者监听模型事件
3、通过观察者监听模型事件
如何选择,视情况而定。如果只是监听一两个模型事件,第一种方式比较合适;如果仅仅监听系统支持的模型事件,并且要监听多个模型的多个事件,观察者是最佳选择;如果还要在模型类上监听更多系统模型事件之外的自定义事件,则使用订阅者来监听比较合适。