Laravel 的觀察者使用記錄與兩種方式

tiroGuang發表於2018-10-19

根據文件的觀察者,我們平時的使用方式是先建立一個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的賬戶,所以先過一遍視訊,然後對著翻譯教程再來一遍,收穫真的巨大,順便還能幫助譯者改正一些小錯誤,也有不小的成就感。(小聲:推薦小白學習,真的不要再說什麼去閱讀原始碼了,效果真的不大,過幾天基本全忘關了。多寫多用才能記住,才能更好的掌握程式設計這門技能,也是最快的學習方式)。

不積跬步無以至千里

相關文章