前言
Eloquent 模型有以下生命週期,透過這些鉤子(hooks)可以觸發自訂的 Event 事件:
- 當模型被查找時:
retrieved
- 當模型被新增時:
creating、created
- 當模型被更新時:
updating、updated、saving、saved
- 當模型被刪除時:
deleting、deleted
- 當模型被回復時:
restoring、restored
- 當模型被複製時:
replicating
服務提供者
首先,建立一個 ObserverServiceProvider 服務提供者。
1
| artisan make:provider ObserverServiceProvider
|
修改服務提供者:
1 2 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 中:
1 2 3 4 5 6 7 8 9 10
| return [
'providers' => [
App\Providers\ObserverServiceProvider::class,
],
];
|
觀察者
建立一個 UserObserver 觀察者。
1
| php artisan make:observer UserObserver --model=User
|
修改 UserObserver 觀察者:
1 2 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 介面進行測試。
新增模型。
1 2
| User::create(['email'=>'admin@email.com', 'name'=>'admin', 'password'=>'password']) "user created!"
|
查找模型。
1 2
| User::find(1) "user retrieved!"
|
更新模型。
1 2 3
| User::find(1)->update(['name'=>'user']) "user retrieved!" "user updated!"
|
刪除模型。
1 2 3
| User::find(1)->delete() "user retrieved!" "user deleted!"
|
程式碼
參考資料