Symfony QueryBuilder-查询中的过滤器集合

时间:2019-12-11 14:25:43

标签: database symfony join query-builder

我有这样的查询:

return $this->createQueryBuilder('supervision')
        ->join('supervision.supervisionEvents', 'supervisionEvents')
        ->andWhere('supervisionEvents.episode = :episode')
        ->setParameter('episode', $episode)
        ->getQuery()
        ->getResult()
        ;

我想获得所有监管,但我要过滤的monitoringEvents。 结果,我只想拥有带有Episode =:episode的SupervisionEvents。

我使用了join,leftJoin和innerJoin。没有什么能像期望的那样工作。

我试图对联接施加条件:

 ->innerJoin('s.supervisionEvents', 'supervisionEvent', 'WITH', 'supervisionEvent.episode = :episode')

但是那也不行!

1 个答案:

答案 0 :(得分:-1)

您实际上非常接近。您只想仅对联接进行过滤,因此对 join子句使用带条件的左联接:

return $this->createQueryBuilder('supervision')
    ->addSelect('supervisionEvents')
    ->leftJoin('supervision.supervisionEvents', 'supervisionEvents', Join::WITH, 'supervisionEvent.episode = :episode')
    ->setParameter('episode', $episode)
    ->getQuery()
    ->getResult()
    ;

还需要选择连接的关系,以便在结果上将其水合。

参考  -doctrine left join with condition