直接上代码
App\Observers
<?php
namespace App\Observers;
class TestObserver {
public function creating() {
dump("create - 1 action");
}
public function updated() {
dump("update + 1 action");
}
}
App\Providers\EventServiceProvider.php 注册
/**
* Register any events for your application.
* 记得引入模型
* @return void
*/
public function boot()
{
parent::boot();
//
TestModel::observe(TestObserver::class);
}
控制器测试
public function test(){
$data = [
'title' => 'test',
'displayorder' => 3,
'type' => 'testtest'
];
TestModel::create($data);
dump("create action");
}
public function test(){
$data = [
'title' => 'test',
'displayorder' => 4,
'type' => 'testtest'
];
TestModel::where('id', 3)->first()->update($data);
dump("update action");
}
模型钩子方法
retrieved, #获取到模型实例后触发
creating, #创建过程前 * 常用
created, #创建成功后 * 常用
updating, #更新过程前 * 常用
updated, #更新成功后 * 常用
saving, #代表这两个方法的集合creating,updating * 常用
saved, #代表这两个方法的集合created,updated * 常用
deleting, #删除过程前 * 常用
deleted, #删除过程后 * 常用
restoring, #恢复软删除记录前触发
restored, #恢复软删除记录后触发
当模型已存在,非新建时,事件触发顺序如下:
saving -> updating -> updated -> saved
当模型不存在,即需要新增时,事件触发顺序如下:
saving -> creating -> created -> saved
一个save()方法执行成功的话,会影响updated 和 saved,并且是先触发updated事件再触发saved事件,所以实际使用观察者的时候二选一即可,千万别两个事件重复交叉了。