前言
Eloquent 模型有以下生命週期,透過這些鉤子(hooks)可以觸發自訂的 Event 事件:
- 當模型被查找時:retrieved
- 當模型被新增時:creating、created
- 當模型被更新時:updating、updated、saving、saved
- 當模型被刪除時:deleting、deleted
- 當模型被回復時:restoring、restored
- 當模型被複製時:replicating
服務提供者
首先,建立一個 ObserverServiceProvider 服務提供者。
| 1
 | artisan make:provider ObserverServiceProvider
 | 
修改服務提供者:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | namespace App\Providers;
 use App\Observers\UserObserver;
 use App\User;
 use Illuminate\Support\ServiceProvider;
 
 class ObserverServiceProvider extends ServiceProvider
 {
 
 
 
 
 
 public function register()
 {
 
 }
 
 
 
 
 
 
 public function boot()
 {
 User::observe(UserObserver::class);
 }
 }
 
 | 
將服務提供者註冊到 config 資料夾的 app.php 中:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | return [
 'providers' => [
 
 
 App\Providers\ObserverServiceProvider::class,
 
 ],
 
 ];
 
 | 
觀察者
建立一個 UserObserver 觀察者。
| 1
 | php artisan make:observer UserObserver --model=User
 | 
修改 UserObserver 觀察者:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 
 | namespace App\Observers;
 use App\User;
 
 class UserObserver
 {
 
 
 
 
 
 
 public function retrieved(User $user)
 {
 dump('user retrieved!');
 }
 
 
 
 
 
 
 
 public function created(User $user)
 {
 dump('user created!');
 }
 
 
 
 
 
 
 
 public function updated(User $user)
 {
 dump('user updated!');
 }
 
 
 
 
 
 
 
 public function deleted(User $user)
 {
 dump('user deleted!');
 }
 }
 
 | 
觸發事件
使用 Tinker 介面進行測試。
新增模型。
| 12
 
 | User::create(['email'=>'[email protected]', 'name'=>'admin', 'password'=>'password'])"user created!"
 
 | 
查找模型。
| 12
 
 | User::find(1)"user retrieved!"
 
 | 
更新模型。
| 12
 3
 
 | User::find(1)->update(['name'=>'user'])"user retrieved!"
 "user updated!"
 
 | 
刪除模型。
| 12
 3
 
 | User::find(1)->delete()"user retrieved!"
 "user deleted!"
 
 | 
程式碼
參考資料