根據文件的觀察者,我們平時的使用方式是先建立一個App\Observers
資料夾,然後建立想要操作的模型對應的observer,比如說建立一個UserObserver
。
<?php
namespace App\Observers;
use App\User;
class UserObserver
{
}
獲得這個類之後,我們需要到AppServiceProvider
的boot方法當中進行註冊,也可以是其他的ServiceProvider,不固定。
public function boot()
{
User::observe(UserObserver::class);
}
別忘了引入model,做完這些我們就可以各種操作了。
laravel已經為我們預先定義了10種方法:creating
, created
, updating
, updated
, saving
, saved
, deleting
, deleted
, restoring
, restored
。
這些方法分別是進行時與完成之後。比如我們刪除使用者的時候,可以用deleting方法刪除跟這個使用者有關聯的其他資料。
public function deleting(User $user)
{
Thread::where('user_id', $user->id);
}
希望弄的更清楚的,可以參考Laravel 中的模型事件與 Observer。
最近跟著TDD 構建 Laravel 論壇筆記教程做下去,發現原來還能直接在模型當中直接定義boot方法,進行同樣的操作。
public static function boot()
{
static::deleting(function ($model) {
$model->threads->delete();
});
}
我預先定義了關聯關係,所以取到相關的Thread能直接刪除。
insert方法不會被監聽到,以及批量刪除時也同樣不會被監聽到,必須一條一條建立或者一條一條刪除才行。(原始碼沒咋研究,也不是很清楚,只是踩到過這坑)
就比如上面的程式碼,這樣子批量刪除thread是不會被監聽到的,你可以這樣寫
$model->threads->each->delete();
題外話:
使用laravel快一年了,跟著教程學了差不多三分之一,真的學到了許多以前完全不知道的使用方式。因為有laracasts的賬戶,所以先過一遍視訊,然後對著翻譯教程再來一遍,收穫真的巨大,順便還能幫助譯者改正一些小錯誤,也有不小的成就感。(小聲:推薦小白學習,真的不要再說什麼去閱讀原始碼了,效果真的不大,過幾天基本全忘關了。多寫多用才能記住,才能更好的掌握程式設計這門技能,也是最快的學習方式)。