模型事件幾種用法


一 、簡單粗魯(用于本地測試)

路由中定義:

Event::listen('eloquent.updated: App\Post',function (){
   dump('測試一下修改事件');
});
Route::post('/post/{id}', 'PostController@update');

二 、生成事件和監(jiān)聽器

在 EventServiceProvider 定義對應關系

    protected $listen = [
        'App\Events\PostEvent' => [
                'App\Listeners\PostListener',
            ],
    ];
php artisan event:generate  //生成文件

event 中注入要操作的類
listen 中handle 方法注入對應事件類

    public function handle(PostEvent $event)
    {
        dump('測試一下修改事件');
    }

最后在 post 模型中添加 'events' 屬性

    protected $events = [
         'updated' => PostListener::class
    ];

三 、利用框架的 boot 方法

直接在相關 Model 中定義

    public static function boot() {
        parent::boot();
        
        static::updated(function($model) {
            dump('測試一下修改事件');
        });
    }

四 、定義Trait

如果想對多個模型的updated 或 created 事件進行一些操作,該不會每個模型都單獨寫一個吧.例如: 日志 .

trait LogRecord
{
    //注意,必須以 boot 開頭
    public static function bootLogRecord()
    {
        foreach(static::getModelEvents() as $event) {
            static::$event(function ($model){
                $model->setRemind();
            });
        }
    }


    public static function getModelEvents()
    {
        if(isset(static::$recordEvents)){
            return static::$recordEvents;
        }
        return ['updated'];
    }

    public function setRemind()
    {
       dump('記錄邏輯操作');
    }
}

然后,在模型中use trait 就可以了.

? creating - 對象已經(jīng) ready 但未寫入數(shù)據(jù)庫
? created - 對象已經(jīng)寫入數(shù)據(jù)庫
? updating - 對象已經(jīng)修改但未寫入數(shù)據(jù)庫
? updated - 修改已經(jīng)寫入數(shù)據(jù)庫
? saving - 對象創(chuàng)建或者已更新但未寫入數(shù)據(jù)庫
? saved - 對象創(chuàng)建或者更新已經(jīng)寫入數(shù)據(jù)庫
? deleting - 刪除前
? deleted - 刪除后
? restoring - 恢復軟刪除前
? restored - 恢復軟刪除后
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,992評論 19 139
  • 事件 簡介 laravel 的事件提供了一種簡單的觀察者實現(xiàn)。它允許你在應用中進行訂閱和監(jiān)聽事件。事件類通常都是存...
    Dearmadman閱讀 3,617評論 0 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,558評論 25 708
  • 這所有的一切不過是信息,這世界的本質就是信息的重組與呈現(xiàn)。 如何讓別人對你刮目相看?超出別人對你的預期。 對同齡人...
    愛閃電的魚閱讀 212評論 0 1
  • 教育培訓工作,是助人工作,教書育人,給人知識,給人方向,給人信心,給人改變的勇氣,我認為教育工作人是非常偉大的,用...
    V叔能量圈閱讀 408評論 0 1