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

如何在Laravel查询中正确筛选满足关联计数>0的行?

解决方案

要筛选出关联的children模型中serial_numbers_count>0的ClassClass记录,你需要在查询中添加嵌套的whereHas条件,用来校验关联层级的计数要求,同时保留原有的关联加载逻辑。

修改后的完整代码如下:

$classClass = ClassClass::query()
    ->with('parent')
    ->with(['children' => function ($query) {
        $query->withCount(['serialNumbers' => function($query) {
            $query->whereNull('serial_number_parent_id')
                  ->whereNull('inherit_class_for_serial_number_id');
        }]);
    }])
    // 筛选条件:仅保留存在符合条件serialNumbers的children的ClassClass
    ->whereHas('children', function ($query) {
        $query->whereHas('serialNumbers', function($query) {
            $query->whereNull('serial_number_parent_id')
                  ->whereNull('inherit_class_for_serial_number_id');
        });
    })
    ->where('parent_class_id', '=', $class->id)
    ->orderBy('id')
    ->get();

关键改动说明

  • whereHas('children', ...):校验当前ClassClass是否存在符合后续条件的关联children模型
  • 嵌套的whereHas('serialNumbers', ...):进一步校验该children模型是否存在满足whereNull条件的serialNumbers记录(等价于serial_numbers_count>0)
  • 原有的with('children', ...)逻辑保留,确保返回结果中仍能获取到serial_numbers_count的统计值

内容的提问来源于stack exchange,提问作者Алексей Ягодаров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:03:14