具有多个连接的 Doctrine 2 查询

Doctrine 2 query with multiple joins

我遇到了一个查询问题,希望有人可以帮助我编写代码。

我的 Class 看起来像这样:

人 1 ------ 1..* 参与 1...* -------- 1 事件

现在我在 class 事件上有一个名为 'isActive' 的属性,在人 Class 上我有一个属性 'isChecked'。

对于我的查询,我想 return 所有 'isChecked' 没有参加 'isActive' 活动的人。

到目前为止,这是我的查询,但它不是return我需要的:

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->andWhere('p.isChecked = true')
        ->leftJoin('p.participation', 'pa')
        ->andWhere('pa IS NULL')
        ->leftJoin('pa.event', 'e')
        ->andWhere('e.isActive = true');

如果有人能告诉我,我在这里做错了什么,那就太棒了。

亲切的问候, 塞巴斯蒂安

您需要使用 WITH 子句调整您的连接部分,从过滤条件中删除 ->andWhere('e.isActive = true') 并在连接您的实体部分时移动此子句,以便只有事件(行与pa) 返回标记为 isActive.

DQL

SELECT p
FROM AppBundle:Person p
LEFT JOIN p.participation pa
LEFT JOIN pa.event e WITH e.isActive = true
WHERE p.isChecked = true
AND pa IS NULL

在查询生成器中,您可以将其表示为

$query = $em->createQueryBuilder('c')
        ->select('p')
        ->from('AppBundle:Person', 'p')
        ->leftJoin('p.participation', 'pa')
        ->leftJoin('pa.event', 'e','WITH', 'e.isActive = true')
        ->andWhere('p.isChecked = true')
        ->andWhere('pa IS NULL');