deleted事件監聽報錯

gema發表於2020-09-23

模型中設定了

 protected $dispatchesEvents = [
        "deleted" => ModelChanged::class,
    ];

並且在EventServiceProvider中新增了關聯
在Listener中 對處理類 implements ShouldQueue
然後在模型觸發deleted事件後,監聽任務會報了
Illuminate\Database\Eloquent\ModelNotFoundException錯誤
檢視fail_jobs表中的錯誤資訊

#0 root\vendor\laravel\framework\src\Illuminate\Queue\SerializesAndRestoresModelIdentifiers.php(102): Illuminate\Database\Eloquent\Builder->firstOrFail()
#1 root\vendor\laravel\framework\src\Illuminate\Queue\SerializesAndRestoresModelIdentifiers.php(57): App\Events\AddressChanged->restoreModel(Object(Illuminate\Contracts\Database\ModelIdentifier))

大概是因為,觸發事件後,laravel會將事件序列化並重新儲存模型。
重新去資料庫查詢模型, 但是模型此時已經被刪除完了(deleted刪除後), 自然就找不到了
問題就處在 implements ShouldQueue 所以, 去掉 implements ShouldQueue即可, 想要放到佇列任務可以在listener中新增相關操作到佇列任務中

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章