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

为何Laravel路由模型绑定访问存在的记录却返回404错误?

Laravel路由模型绑定返回404问题排查

以下是几种可能的原因及解决办法:

  • 访问路径不匹配
    你定义的路由是 /posts/archived/{post},但你访问的是 /posts/1——路径缺少了/archived分段,正确的访问地址应为 /posts/archived/1,先确认访问路径和路由定义完全一致。

  • 模型启用软删除,目标记录已被软删除
    如果Post模型使用了SoftDeletes trait,默认路由模型绑定只会查询未被软删除的记录。若目标记录是已归档(软删除)状态,需调整查询逻辑:

    • 方式1:在Post模型中添加全局作用域(适用于所有路由需要包含软删除记录的场景)
      protected static function booted()
      {
          static::addGlobalScope('withTrashed', function ($query) {
              $query->withTrashed();
          });
      }
      
    • 方式2:自定义当前路由的模型绑定(仅针对该路由生效)
      Route::get('/posts/archived/{post}', [PostController::class, 'show'])->bind(function ($value) {
          return Post::withTrashed()->findOrFail($value);
      });
      
  • 路由模型绑定的主键不匹配
    确认Post模型的主键字段是否为默认的id:

    • 若模型自定义了主键(比如slug),需在模型中声明:
      protected $primaryKey = 'slug';
      
    • 或者在路由中明确指定绑定字段:
      Route::get('/posts/archived/{post:id}', [PostController::class, 'show']);
      
  • 路由缓存未清除
    若之前生成过路由缓存,修改路由后需执行命令清除缓存:

    php artisan route:clear
    
  • 路由优先级冲突
    确保这条路由没有被更靠前的通用路由(比如Route::get('/posts/{id}', ...))覆盖,Laravel按路由定义顺序匹配,需将更具体的路由放在前面。

内容的提问来源于stack exchange,提问作者Pwned

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:27:14