Laravel 5.6中Eloquent路由隐式绑定失效问题排查请求
嘿,我看你在开发应用时遇到了路由模型绑定的异常,没法定位问题,结合你给出的代码片段,我整理了几个常见的排查方向,你可以逐一检查:
检查参数与变量名是否匹配
你的路由参数是{filial},控制器update方法里的模型变量必须是Filial $filial才能让Laravel自动完成绑定。看你代码里写的是Filial $...,这里是不是没写完?如果变量名和路由参数名不一致(比如写成$filiais),绑定肯定会失效。确认模型的路由键配置
Laravel默认用模型的主键(一般是id)来匹配路由参数。如果你的filiais表用的不是id作为主键,或者想自定义绑定字段,得在Filial模型里设置$routeKeyName:protected $routeKeyName = '你的字段名'; // 比如'filial_code'另外也要确保请求里传的
filial参数值是数据库里存在的有效数据哦。排查中间件与权限限制
你的路由加了auth:api中间件,先确认请求已经通过认证。如果去掉这个中间件后绑定正常了,那可能是认证后加的权限限制(比如模型的全局作用域)导致找不到对应记录。检查模型全局作用域
如果Filial模型有全局作用域(比如只显示当前用户关联的分店),当请求的filial参数对应的记录不在这个范围内时,Laravel会返回404,看起来就像绑定失效。可以先注释掉全局作用域代码测试下。确认方法参数顺序
控制器update方法里,FilialRequest $request要放在模型参数前面,你现在的顺序是对的,但如果搞反了也会出问题,这点别忽略。查看Laravel日志
最直接的方式是去storage/logs/laravel.log里找详细错误信息,路由模型绑定失败时,日志里会记录具体原因,比如找不到记录、参数类型不匹配等,看日志能快速定位问题。
内容的提问来源于stack exchange,提问作者Juliano Rafael

