Laravel 5.8 Observer的deleted方法未触发问题求助
Laravel 5.8 观察者deleted方法不触发的解决方案
问题出在你删除数据的方式上:
你使用的PaymentData::where('idx', $idx)->delete()是查询构建器的批量删除操作,这种方式不会触发模型观察者的任何事件——包括deleted方法。只有当你调用模型实例的delete()方法时,Laravel才会触发对应的观察者钩子。
修正代码
把控制器里的删除逻辑改成先获取模型实例,再调用实例的delete()方法:
Pay Controller.php
public function delete(Request $request, $idx){ $payData = PaymentData::where('idx', $idx)->firstOrFail(); $payData->delete(); return response()->json(['status' => true]); }
这样修改后,PayObserver里的deleted方法就会正常触发,进而删除关联的AppData记录。
补充说明
如果后续有批量删除需求且需要触发观察者,只能循环遍历每个模型实例并调用delete(),但这种方式在数据量较大时要注意性能问题。你的场景是单条数据删除,用上述方法完全适用。
内容的提问来源于stack exchange,提问作者Julian
相关产品推荐
相关产品推荐

