我试图找到没有或少于3个关系的所有行。对此最好的方法是什么?
我尝试了以下代码,有几个不同的选择,有,加入,但我无法弄清楚如何以正确的方式做到这一点:
$db = $this->createQueryBuilder('u');
$db->addSelect('COALESCE(COUNT(errors), 0) AS HIDDEN errorCount');
$db->join('u.errors', 'errors');
$db->where('u.field1 IS NULL AND u.field2 NOT LIKE \'\'');
$db->having('errorCount < 3');
非常感谢你。
答案 0 :(得分:1)
COUNT
函数是一个聚合函数,它将返回单个结果,除非您指示它按某种方式分组。
$db = $this->createQueryBuilder('u');
$db->addSelect('COUNT(errors) AS HIDDEN errorCount');
$db->leftJoin('u.errors', 'errors');
$db->where('u.field1 IS NULL AND u.field2 NOT LIKE \'\'');
$db->having('errorCount < 3');
$db->groupBy('u');
此外,如果要计算可能存在或不存在的关系数,请使用LEFT JOIN
。这些结果的计数为0
,即< 3
。