You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:32:41