symfony doctrine获取已过滤子行的原始计数

时间:2018-04-11 06:49:14

标签: symfony doctrine-orm

我的实体“parent”与OneToMany上下文中的实体“child”有关。父母有很多孩子。

我需要过滤符合某些条件的这些孩子。在这种情况下,有效的子ID列表。

我想让只有父母的ALL和ONLY孩子符合条件。现在,通过下面的代码,我可以让孩子匹配条件,但也可以让孩子符合条件。

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()
            ;

1 个答案:

答案 0 :(得分:0)

一种方法是:

  • 内心加入所有没有条件的孩子
  • 使用 CASE ... THEN ... ELSE 创建计算值,如果child.id在child_list中,则将值设置为1,如果不在,则将值设置为0
  • 将上述计算值相加
  • 检查SUM(值)= count(child_list)

更改为:

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()
            ;