Symfony 如何在DQL中使用或表达式进行连接?

Symfony 如何在DQL中使用或表达式进行连接?,symfony,doctrine-orm,Symfony,Doctrine Orm,下面是我期望从条令中获得的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 问题是,我无法让条令以或生成JOIN操作。如果我们从以下QueryBuilder对象执行查询: $qb->select('c')

下面是我期望从条令中获得的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
问题是,我无法让条令以
生成
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
操作符似乎在基本查询中添加了附加条件,而不是替换整个条件


有没有办法强迫条令输出我所需要的?我知道我可能会使用原生SQL,但我怀疑它是否会像
QueryBuilder
那样方便。也许有一种方法可以在实现中使用普通的
连接来扩展条令,而不是使用
连接这种奇怪的
连接?

条令没有实现这一点,因为它(至少据我所知)被认为对SQL不够优化


您想要做的事情可以使用
Union
和其他类型的
Join
来完成。谢谢您的回答。似乎无论是
Join..或
还是
Union
都不能被认为是足够优化的,可以在理论中实现。这是否意味着除了本机SQL之外,没有其他选择了?@VisioN我确实这么认为。一般来说,我认为原生SQL在90%的情况下都是经过优化的,唯一的条件是一个人实际上知道如何编写适当的优化SQL(这与我的情况相去甚远)。