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

Laravel关联表筛选报错:未知列'details.name',如何解决?

问题解决:按关联表字段筛选分类

错误原因:with('details')是预加载关联数据,它会先查询主表Category,再批量查询关联的CategoryDetails表,并不会将两张表做JOIN操作。直接在主查询里使用where('details.name'),数据库会误认为details.name是Category表的字段,因此报错找不到列。

正确做法是使用whereHas方法,针对关联关系进行条件筛选:

修改后的控制器代码:

public function index(Request $request)
{
    $categories = Category::with('details')
        ->when($request->has('name'), function ($q) use ($request) {
            // 用whereHas筛选关联表的字段
            return $q->whereHas('details', function ($query) use ($request) {
                $query->where('name', 'like', $request->query('name') . '%');
            });
        })
        ->paginate(15);
    
    return view('ecommerce::admin.catalog.category.index', compact('categories'));
}

说明:

  • whereHas('details')会自动处理两张表的关联JOIN,只返回存在符合条件的details记录的Category数据
  • 内部闭包的查询是针对CategoryDetails表的,所以直接使用name字段即可,无需加表前缀

当前的模型关联方法无需修改,hasOne关联配置是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:01