<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 詳解 ``` ? creating - 對象已經 ready 但未寫入數據庫 ? created - 對象已經寫入數據庫 ? updating - 對象已經修改但未寫入數據庫 ? updated - 修改已經寫入數據庫 ? saving - 對象創建或者已更新但未寫入數據庫 ? saved - 對象創建或者更新已經寫入數據庫 ? deleting - 刪除前 ? deleted - 刪除后 ? restoring - 恢復軟刪除前 ? restored - 恢復軟刪除后 ``` 依次是 saving>creating>created>saved。 update 同理就不具體貼代碼了, saving>updating>updated>saved。 而 delete 不涉及 save,因此依次只觸發了 deleting 和deleted。 當 restore 軟刪除記錄時觸發了 restoring 和 restored 方法。 Eloquent模型可以觸發事件,允許你在模型生命周期中的多個時間點調用如下這些方法:creating, created, updating, updated, saving, saved,deleting, deleted, restoring, restored。事件允許你在一個指定模型類每次保存或更新的時候執行代碼。 一個新模型被首次保存的時候,creating和created事件會被觸發。如果一個模型已經在數據庫中存在并調用save方法,updating/updated事件會被觸發,無論是創建還是更新,saving/saved事件都會被調用. deleting和deleted很好理解,在刪除模型時觸發,deleting在刪除操作前執行,deleted在刪除完成后執行。 當創建模型時,依次執行saving、creating、created和saved,同理在更新模型時依次執行saving、updating、updated和saved。無論是使用批量賦值(create/update)還是直接調用save方法,都會觸發對應事件(前提是注冊了相應的模型事件)。 # 服務提供者寫 你可以在任何你喜歡的地方注冊模型事件,這里我們選擇在服務提供者AppServiceProvider的boot方法中注冊: ``` //注意命名空間 Post::saving(function($post){ echo 'saving event is fired<br>'; }); Post::creating(function($post){ echo 'creating event is fired<br>'; }); Post::created(function($post){ echo 'created event is fired<br>'; }); Post::saved(function($post){ echo 'saved event is fired<br>'; }); ``` 然后只有有對應的操作就會觸發這邊 # Tratis 核心就是trait里面有個boot+trait名,laravel在啟動的時候會檢測,并把他放在服務容器里面 用traits的話,用的時候use下就好了 比如在一個網站上用戶有活動記錄的,那么我們把他記錄下來 Activity表 | 鍵名 | 類型 | | --- | --- | | id | PK | | user_id | FK posts's id | | conversation_id | 多態關聯的主鍵id | | conversation_type | 多態關聯的命名空間 | | created_at | timestamp | | updated_at | timestamp | 然后比如用戶新增一篇文章,我們要把他的行為記錄下來 寫個trait RecordActivity.php ``` namespace App\Models; trait RecordActivity { /** * 命名是boot+traits的名字 * 這樣寫laravel在啟動項目的時候會為我們自動執行這個方法 */ public static function bootRecordActivity() { foreach (static::getModelEvents() as $event) { static::$event(function ($model){ //生成相應數據,把數據寫到Activity這個表里面 $model->recordActivity(); }); } } protected static function getModelEvents() { //判斷用戶有沒有定義相關的屬性 if (isset(static::$recordEvents)){ return static::$recordEvents; } return ['created'];//你也可以加上其他的事件 比如updated } public function recordActivity() { Activity::create([ 'user_id'=>1, //這邊測試就寫個1,可以寫\Auth::id() 'conversation_id'=>$this->id, 'conversation_type'=>get_class($this), ]); } } ``` 一旦use這個trait,他會自動執行,一旦有created的事件發生(可以在里面自己定義) 自己定義就定義下這個屬性就好了 `static::$recordEvents` 他就不會用created了 Activity.php 活動模型 ``` public function conversation() { return $this->morphTo(); } ``` User.php用戶模型 ``` public function activities() { return $this->hasMany(Activity::class); } ``` Post模型,讓post一旦有created就觸發寫好的 ``` use RecordActivity; ``` 我們開始試下 ``` $post=\App\Models\Post::create(['title'=>'new1']); return $post; ``` 這樣我們可以看到Activities表中有活動記錄了 如果我們要查一個用戶的活動記錄 ``` $user=\App\Models\User::find(1); $activity=$user->activities->toArray(); return $activity; ``` 我們就可以看到用戶在Activity表中的記錄了 如果我們要查一個用戶,我們可以在用戶表中寫對應的關聯 user.php中寫 ``` public function activities() { //這邊的conversation就是activity模型的方法名 return $this->hasMany(Activity::class)->with('conversation'); } ``` 然后我們測試下 ``` $user=\App\Models\User::find(1); $activity=$user->activities; return $activity; ``` # 簡單粗魯(用于本地測試) 路由中定義: ~~~ Event::listen('eloquent.updated: App\Post',function (){ dump('測試一下修改事件'); }); Route::post('/post/{id}', 'PostController@update'); ~~~ http://blog.csdn.net/a_new_steven/article/details/73604846
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看