sql - 具有多个连接的 Doctrine 2 查询
问题描述
我被一个查询困住了,我希望有人可以帮助我的代码。
我的课程看起来像这样:
人 1 ------- 1..* 参与 1...* -------- 1 事件
现在我在 Event 类上有一个名为“isActive”的属性,在 Person 类上有一个属性“isChecked”。
通过我的查询,我想返回所有未参与“isActive”事件的“isChecked”人员。
到目前为止,这是我的查询,但它没有返回我需要的内容:
$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');
如果有人能告诉我,我在这里做错了什么,那就太棒了。
亲切的问候,塞巴斯蒂安
解决方案
您需要通过 usingWITH
子句调整您的连接部分,->andWhere('e.isActive = true')
从 where 过滤器中删除并将此子句移动到连接部分实体中,以便仅返回标记为 isActive 的事件(行与 pa 连接)。
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');
推荐阅读
- python - 如何将 joblib 转储保存到另一个文件夹?
- google-sheets - 当我将 Google 工作表另存为 xlsx 时,使用 =image() 看不到工作表中的图像
- django - ModuleNotFoundError:Elastic Beanstalk 上没有名为“django”的模块
- c# - 列表继承更改破坏了向后兼容性
- c++ - 在指定的自定义类迭代器位置插入节点
- python - 如何将循环添加到用户名和密码登录(Python)?
- python - 如何在 Python 中打印带引号的字符串和变量?
- asp.net - ASP.Net HyperLinkField、弹出窗口和 Chrome - 如何
- logstash - 为什么我的代码在 grok 调试器中不起作用
- sql-server - 如何使用日期和时间参数进行 ssrs 查询