Doctrine orm 使用DQL仅选择具有给定关联对象计数的实体

Doctrine orm 使用DQL仅选择具有给定关联对象计数的实体,doctrine-orm,doctrine,dql,Doctrine Orm,Doctrine,Dql,我如何在DQL实体中过滤已给定附加关联对象计数的对象 例如: $qb = $this->createQueryBuilder('u'); $qb->where('COUNT(u.moods) > 1'); 其中u.moods是用户的一对多关系?您可以使用此查询生成器配置 $qb = $this->createQueryBuilder('u'); $qb ->select(array('u')) ->from('User', '

我如何在DQL实体中过滤已给定附加关联对象计数的对象

例如:

    $qb = $this->createQueryBuilder('u');
    $qb->where('COUNT(u.moods) > 1');

其中u.moods是用户的一对多关系?

您可以使用此查询生成器配置

$qb = $this->createQueryBuilder('u');
$qb
    ->select(array('u'))
    ->from('User', 'u')
    ->innerJoin('u.moods', 'm')
    ->having(
        $qb->expr()->gt(
            $qb->expr()->count('m'), 1
        )
    );

return $qb->getQuery()->getResult();
或者如果您更喜欢DQL

$dql = "SELECT u FROM User u JOIN u.moods m HAVING COUNT(m) > 1";

$query = $this->createQuery($dql);

return $query->getResult();

我认为有两种方法,一种是计算ArrayCollection中关联对象的数量。或者,您可以实际查询具有的关联实体(其中位于())。