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

Laravel Eloquent使用with关联查询如何仅返回指定的关联items

问题原因

  • 第一段代码的问题:whereHas 仅用于筛选「存在符合要求关联项的分类」,不会限制 with() 加载的关联数据范围,所以会返回分类下的所有item
  • 第二段代码的问题:循环叠加 whereHas 相当于要求分类必须同时包含所有你传入的选中item,只要缺一个就不会返回该分类,自然容易出现结果为空的情况

正确写法

给 with() 也加上关联过滤条件即可,代码如下:

$reqItems = $request->items; //array - selected item
$categories = Category::where('type_id', 1)
     ->whereHas('items', function ($query) use ($reqItems){
         $query->whereIn('id', $reqItems);
     })
    ->with(['items' => function ($query) use ($reqItems) {
        // 这里限制只加载选中的item
        $query->whereIn('id', $reqItems);
    }])
    ->get();

逻辑说明

上述代码同时实现两层过滤:

  1. whereHas 部分:只返回至少包含一个选中item的分类,排除完全没有符合要求关联项的分类
  2. with 闭包部分:仅加载每个分类下属于你选中列表的item,不会返回其他无关数据

如果你不需要过滤分类(哪怕分类下没有选中项也需要返回分类,只是关联item字段为空),直接删除whereHas部分即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:45:04