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