Laravel:软删除模型详情页404错误的解决方法
解决Laravel软删除模型详情页404的问题
你的问题出在路由模型绑定的默认行为上:Laravel的路由模型绑定会自动过滤掉软删除的记录,所以当你尝试访问已标记为删除的报价时,Quotation $quotation 这个注入会直接找不到模型,抛出404错误——哪怕你后面用withTrashed()查询也没用,因为路由模型绑定的检查在控制器方法执行之前就完成了。
下面给你两种可行的解决方案:
方案一:修改路由模型绑定,包含软删除记录
在定义路由的时候,给对应的路由加上->withTrashed()方法,告诉Laravel这个路由允许查询软删除的模型:
Route::get('/quotations/{quotation}', [QuotationController::class, 'show'])->withTrashed();
之后你的控制器方法可以简化成这样(不需要再手动查一次):
public function show(Quotation $quotation) { // 注意:这里需要确保$activities变量已定义,比如关联查询或者从模型获取 $activities = $quotation->activities; // 示例,根据你的实际关联调整 return view('quotations.show', compact('quotation', 'activities')); }
方案二:放弃路由模型绑定,手动查询模型
如果你不想修改路由规则,可以直接接收id参数,然后自己用withTrashed()查询:
public function show($id) { // 用findOrFail确保找不到时还是抛出404,符合RESTful规范 $quotation = Quotation::withTrashed()->findOrFail($id); // 初始化activities变量,根据你的业务逻辑调整 $activities = $quotation->activities; return view('quotations.show', compact('quotation', 'activities')); }
额外提醒
你的原代码里$activities变量没有初始化,即使修复了软删除的问题,也会抛出变量未定义的错误,记得补充这部分逻辑(比如通过模型关联获取,或者查询对应的活动数据)。
内容的提问来源于stack exchange,提问作者f7n
相关产品推荐
相关产品推荐

