Doctrine DQL:如何使表达式反转
Posted
技术标签:
【中文标题】Doctrine DQL:如何使表达式反转【英文标题】:Doctrine DQL: how to get expression to inversed side 【发布时间】:2013-08-06 03:31:16 【问题描述】:我希望获取一个不存在反向关联的实体(在 1:1 关联上)
我得到错误:
DQL 查询不支持反向单值关联路径表达式。使用 而是显式加入。
查询:
$query = $this->getEntityManager()->createQuery("
SELECT DISTINCT(p.date)
FROM MainBundle:Price p
WHERE p.emaPrice IS NULL
ORDER BY p.date ASC
")
->setMaxResults(1);
$date = $query->getOneOrNullResult();
我理解这个错误,但我真的坚持要修复它。我读过我应该添加一个明确的 JOIN,但我已经添加了它,但仍然没有运气。
编辑 使用连接查询:
$query = $this->getEntityManager()->createQuery("
SELECT DISTINCT(p.date)
FROM MainBundle:Price p
JOIN MomentumBundle:EmaPrice ep
WITH ep.id = p.emaPrice
WHERE p.emaPrice IS NULL
ORDER BY p.date ASC
")
->setMaxResults(1);
$date = $query->getOneOrNullResult();
【问题讨论】:
您的查询在加入后看起来如何? @Flip 添加连接查询 你能让它在原生 SQL 中工作吗? 我对您的查询感到困惑。你加入ep.id = p.emaPrice
,然后加入WHERE p.emaPrice IS NULL
。即使查询有效,它也永远不会匹配任何内容。
在这种情况下需要左连接
【参考方案1】:
感谢@Flip 和@lifo 的大力支持,帮助我解决了这个问题:
$query = $this->getEntityManager()->createQuery("
SELECT DISTINCT(p.date)
FROM MainBundle:Price p
LEFT JOIN MomentumBundle:EmaPrice ep
WITH ep.price = p.id
WHERE ep IS NULL
ORDER BY p.date ASC
")
->setMaxResults(1);
$date = $query->getOneOrNullResult();
【讨论】:
以上是关于Doctrine DQL:如何使表达式反转的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Doctrine 2 DQL 中使用 DATE()?
如何删除学说 Doctrine Raw Sql 查询中的特定 dql 部分?