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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:59:52