Laravel 11 API PUT请求报错:No query results for model排查解决
Laravel 11 API PUT请求「No query results for model」错误排查与解决
问题现象
基于Laravel 11开发API时出现异常:
- 仅
CountryController的PUT接口正常运行 DistrictController及其他控制器的PUT请求均返回错误:No query results for model- 已确认数据库中存在对应ID的记录,路由配置、模型与迁移文件均无异常
根因分析
问题出在District等模型注册的Global Scopes上:
当PUT请求携带更新后的name参数时,全局过滤器(如FilterBy作用域)会自动用新的name值对查询进行过滤,导致无法匹配到数据库中原ID对应的模型记录。
解决方案
修改FilterBy全局作用域的apply方法,在请求为PUT或PATCH类型时跳过该全局过滤逻辑:
修改前的apply方法示例
public function apply(Builder $builder, Model $model) { if (request()->has('name')) { $builder->where('name', request('name')); } }
修改后的apply方法
public function apply(Builder $builder, Model $model) { // 排除PUT、PATCH请求,避免更新时用新name过滤原模型 if (!in_array(request()->method(), ['PUT', 'PATCH']) && request()->has('name')) { $builder->where('name', request('name')); } }
修改后,PUT/PATCH请求将不再触发该全局过滤,可正常找到对应ID的模型并完成更新操作。
内容的提问来源于stack exchange,提问作者Can-Kar
相关产品推荐
相关产品推荐

