如何在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,提问作者Алексей Ягодаров
相关产品推荐
相关产品推荐

