Doctrine 2选择没有或少于关系的实体

时间:2015-03-25 01:45:57

标签: symfony doctrine-orm

我试图找到没有或少于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');

非常感谢你。

1 个答案:

答案 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