記錄laravel orm trait載入小技巧

DeathSatan發表於2024-01-15

因為某些時候需要在很多model裡面加入一些儲存前儲存後的事件
比如

  • created_by updated_by 欄位自動維護

這種情況頭一次想的是用 observer
或者直接監聽 model 儲存新增事件

機緣巧合下看到一篇文章 關於laravel orm載入trait的技巧 原文

實現方案

// app/Model/Traits/UserStamps
trait Usertamps{
        public static function bootUserStamps()
        {
            static::creating(function (Model $model) {
                // 設定 created_by 欄位的值為當前登入的使用者ID
                $model->created_by = auth()->id();
            });

            static::updating(function (Model $model) {
                // 設定 updated_by 欄位的值為當前登入的使用者ID
                $model->updated_by = auth()->id();
            });
        }
}

這樣只需要在用到的model直接use這個類即可。

大概語法是

  • initializeUserStamps 每次例項化新模型的時候都會呼叫
  • bootUserStamps 這個應該是類似與 model::booted()裡面執行
本作品採用《CC 協議》,轉載必須註明作者和本文連結
欲買桂花同載酒,終不似,少年遊

相關文章