我遇到了一个查询,我希望有人可以帮助我的代码。
我的班级看起来像这样:
人1 ------- 1 .. *参与1 ... * -------- 1事件
现在我在类Event上有一个名为' isActive'在人类中,我有一个属性' isChecked'。
通过我的查询,我想要返回所有' isChecked'没有参与' isActive'事件
到目前为止,这是我的查询,但它不会返回我需要的内容:
$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');
如果有人能告诉我,我在这里做错了,那就太棒了。
亲切的问候, 塞巴斯蒂安
答案 0 :(得分:0)
您需要使用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');