symfony原则获取筛选子行的原始计数

symfony原则获取筛选子行的原始计数,symfony,doctrine-orm,Symfony,Doctrine Orm,我的实体“父”与实体“子”在一个单一的上下文中相关。父母有许多孩子 我需要筛选符合某些条件的孩子。在这种情况下,需要一个有效的子id列表 我想让所有孩子都符合条件的唯一父母和唯一的孩子。现在,通过下面的代码,我可以得到符合条件的孩子,但也可以得到有孩子不符合条件的孩子 return $this->createQueryBuilder('p') ->innerJoin('p.childs','c','with','c.child IN (:child_list)

我的实体“父”与实体“子”在一个单一的上下文中相关。父母有许多孩子

我需要筛选符合某些条件的孩子。在这种情况下,需要一个有效的子id列表

我想让所有孩子都符合条件的唯一父母和唯一的孩子。现在,通过下面的代码,我可以得到符合条件的孩子,但也可以得到有孩子不符合条件的孩子

return $this->createQueryBuilder('p')
            ->innerJoin('p.childs','c','with','c.child IN (:child_list)')
            ->having('count(c) = :count_child')
            ->groupBy('s')
            ->setParameter('child_list',$childs)
            ->setParameter('count_child',count($childs))
            ->getQuery()
            ->getScalarResult()
            ;
一种方法是:

  • 无条件与所有儿童进行内部连接
  • 使用大小写创建计算值。。。然后。。。ELSE,如果child.id在child_列表中,则将值设置为1,否则将值设置为0
  • 将上述计算值相加
  • 检查总和(值)=计数(子列表)
改为:

return $this->createQueryBuilder('p')
            ->innerJoin('p.childs','c')
            ->addSelect('SUM(case when c.id IN (:child_list) then 1 else 0 end) as HIDDEN totalFound');
            ->having('totalFound = :count_child AND count(c) = :count_child')
            ->groupBy('p')
            ->setParameter('child_list',$childs)
            ->setParameter('count_child',count($childs))
            ->getQuery()
            ->getScalarResult()
            ;