laravel之模型事件

直接上代碼
App\Observers

<?php
namespace App\Observers;

class TestObserver {

    public function creating() {
        dump("create - 1 action");
    }

    public function updated() {
        dump("update + 1 action");
    }
}

App\Providers\EventServiceProvider.php 注冊(cè)

/**
     * Register any events for your application.
     * 記得引入模型
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
        TestModel::observe(TestObserver::class);
    }

控制器測(cè)試

public function test(){
        $data = [
            'title' => 'test',
            'displayorder' => 3,
            'type' => 'testtest'
        ];
        TestModel::create($data);
        dump("create action");
    }
image.png
public function test(){
        $data = [
            'title' => 'test',
            'displayorder' => 4,
            'type' => 'testtest'
        ];
        TestModel::where('id', 3)->first()->update($data);
        dump("update action");
    }
image.png

模型鉤子方法

retrieved,            #獲取到模型實(shí)例后觸發(fā)
creating,             #創(chuàng)建過(guò)程前                                * 常用
created,              #創(chuàng)建成功后                                * 常用
updating,             #更新過(guò)程前                                * 常用
updated,              #更新成功后                                * 常用
saving,               #代表這兩個(gè)方法的集合creating,updating       * 常用
saved,                #代表這兩個(gè)方法的集合created,updated         * 常用
deleting,             #刪除過(guò)程前                                * 常用
deleted,              #刪除過(guò)程后                                * 常用
restoring,            #恢復(fù)軟刪除記錄前觸發(fā)
restored,             #恢復(fù)軟刪除記錄后觸發(fā)

當(dāng)模型已存在,非新建時(shí),事件觸發(fā)順序如下:
saving -> updating -> updated -> saved
當(dāng)模型不存在,即需要新增時(shí),事件觸發(fā)順序如下:
saving -> creating -> created -> saved

一個(gè)save()方法執(zhí)行成功的話,會(huì)影響updated 和 saved,并且是先觸發(fā)updated事件再觸發(fā)saved事件,所以實(shí)際使用觀察者的時(shí)候二選一即可,千萬(wàn)別兩個(gè)事件重復(fù)交叉了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Laravel 模型事件允許你監(jiān)聽(tīng)模型生命周期內(nèi)的多個(gè)關(guān)鍵點(diǎn),甚至可以在阻止一個(gè)模型的保存或者刪除。 Larave...
    summerbluet閱讀 1,337評(píng)論 0 4
  • 一、基礎(chǔ)使用 如何定義模型和使用artisan命令來(lái)創(chuàng)建模型、以及在創(chuàng)建模型的時(shí)候生成數(shù)據(jù)庫(kù)遷移文件 二、More...
    Amazing慕丶涵閱讀 863評(píng)論 0 2
  • 所有支持的模型事件在 Eloquent 模型類(lèi)上進(jìn)行查詢、插入、更新、刪除操作時(shí),會(huì)觸發(fā)相應(yīng)的模型事件(關(guān)于事件我...
    IthinkIcanfly閱讀 2,190評(píng)論 0 1
  • Observer 觀察者模式創(chuàng)建步驟 觀察者監(jiān)聽(tīng)多個(gè)事件觀察者 注冊(cè)觀察者注冊(cè)觀察者 觀察者中事件的發(fā)生順序 la...
    3132閱讀 1,850評(píng)論 0 1
  • Eloquent 模型會(huì)觸發(fā)許多事件,讓你在模型的生命周期的多個(gè)時(shí)間點(diǎn)進(jìn)行監(jiān)控: retrieved, creat...
    Zero_200閱讀 854評(píng)論 0 0

友情鏈接更多精彩內(nèi)容