【Laravel】 了解 update 時,未觸發 model events 的原因

筆記一下,

在使用 spatie/laravel-settings 時,遇到了 spatie/laravel-activitylog未產出LOG紀錄的問題

之前在看官方文件時,

就有看過 當使用 mass update不會觸發到 model 事件中 saving, saved, updating, and updated,

所以 Activity Log 在此時會失效。

 

解決方法

spatie/laravel-settings 在config 中,有一個配置 type 引用 DatabaseSettingsRepository 的檔案,此時我們去繼承覆寫原有更新條件即可。

原本的 getBuilder 後的 update 是使用 mass update 直接更動DB,未引出 model。

理論上依照套件的邏輯,我們使用 first() 去取得 model,再進行動作即可!

 optional($this->getBuilder()
->where('group', $group)
->where('name', $name)
->first())->update([
'payload' => json_encode($value),
]);