模型中設定了
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 協議》,轉載必須註明作者和本文連結