如何在DQL中加入或表达

  • 本文关键字:DQL 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

问题在于,我无法像应该使用的是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操作员似乎在基本条件上添加了其他条件,而不是更换整个条件。

是否有任何方法可以强迫学说准确地输出我需要的东西?我知道我可以使用本机SQL,但我怀疑它会和QueryBuilder一样方便。也许有一种方法可以通过普通的JOIN ON实现来扩展学说,而不是此奇数JOIN WITH

学说无法实现此功能,因为它(据我所知,至少)对SQL的优化不够优化。

请参阅此帖子。

您打算使用Union和其他类型的Join

相关内容

  • 没有找到相关文章

最新更新