【发布时间】:2014-01-31 18:33:27
【问题描述】:
这是我期望从 Doctrine 获得的 SQL 等价物:
SELECT c.* FROM comments c
LEFT JOIN articles a
ON a.id = c.articles_id OR a.translation = c.articles_id
WHERE c.published = 1 AND c.language = a.language
问题是我不能让 Doctrine 使用 OR 生成 JOIN 操作,因为它应该是。如果我们从以下QueryBuilder 对象执行查询:
$qb->select('c')
->from('Project:Comment', 'c')
->leftJoin('c.article', 'a', 'WITH', 'a = c.article OR a.translation = c.article')
->where('c.published = true AND c.language = a.language');
我们收到以下 SQL 语句:
SELECT
...
FROM comments c0_
LEFT JOIN articles a0_ ON c0_.articles_id = a0_.id
AND (
a0_.id = c0_.articles_id OR
a0_.translation = c0_.profiles_id
)
WHERE c0_.published = 1 AND c0_.language = a0_.language
这显然与初始查询不同,WITH 运算符似乎在基本条件的基础上添加了附加条件,而不是替换整个条件。
有什么方法可以强制 Doctrine 输出我需要的内容吗?我知道我可能会使用本机 SQL,但我怀疑它是否会像 QueryBuilder 一样方便。也许有一种方法可以用普通的JOIN ON 实现而不是这个奇怪的JOIN WITH 来扩展 Doctrine?
【问题讨论】:
标签: symfony doctrine-orm