直接上代碼
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 注冊(cè)
/**
* Register any events for your application.
* 記得引入模型
* @return void
*/
public function boot()
{
parent::boot();
//
TestModel::observe(TestObserver::class);
}
控制器測(cè)試
public function test(){
$data = [
'title' => 'test',
'displayorder' => 3,
'type' => 'testtest'
];
TestModel::create($data);
dump("create action");
}

image.png
public function test(){
$data = [
'title' => 'test',
'displayorder' => 4,
'type' => 'testtest'
];
TestModel::where('id', 3)->first()->update($data);
dump("update action");
}

image.png
模型鉤子方法
retrieved, #獲取到模型實(shí)例后觸發(fā)
creating, #創(chuàng)建過(guò)程前 * 常用
created, #創(chuàng)建成功后 * 常用
updating, #更新過(guò)程前 * 常用
updated, #更新成功后 * 常用
saving, #代表這兩個(gè)方法的集合creating,updating * 常用
saved, #代表這兩個(gè)方法的集合created,updated * 常用
deleting, #刪除過(guò)程前 * 常用
deleted, #刪除過(guò)程后 * 常用
restoring, #恢復(fù)軟刪除記錄前觸發(fā)
restored, #恢復(fù)軟刪除記錄后觸發(fā)
當(dāng)模型已存在,非新建時(shí),事件觸發(fā)順序如下:
saving -> updating -> updated -> saved
當(dāng)模型不存在,即需要新增時(shí),事件觸發(fā)順序如下:
saving -> creating -> created -> saved
一個(gè)save()方法執(zhí)行成功的話,會(huì)影響updated 和 saved,并且是先觸發(fā)updated事件再觸發(fā)saved事件,所以實(shí)際使用觀察者的時(shí)候二選一即可,千萬(wàn)別兩個(gè)事件重復(fù)交叉了。