我有以下 SQL 查询:
select bank.*
from bank
join branch on branch.bank_id = bank.id
join account a on a.branch_id = branch.id
join import i on a.import_id = i.id
它返回的正是我所期望的。
现在考虑以下两个 DQL 查询:
$q = Doctrine_Query::create()
->select('Bank.*')
->from('Bank')
->leftJoin('Branch')
->leftJoin('Account')
->leftJoin('Import');
-
$q = Doctrine_Query::create()
->select('Bank.*')
->from('Bank')
->innerJoin('Branch')
->innerJoin('Account')
->innerJoin('Import');
能够使用“join()”方法会很好,但是,从这里的官方 Doctrine 连接文档中,它说,“DQL 支持两种连接 INNER JOIN 和 LEFT JOIN。” 出于某种完全让我无法理解的原因,他们选择不支持自然连接。无论如何,这意味着上面的两个查询是我唯一的选择。好吧,这很不幸,因为它们都不起作用。
第一个查询 - 带有左连接的查询 - 不起作用,因为当然,左连接和自然连接是两个不同的东西。
第二个查询也不起作用。令人困惑的是,我收到一个错误:“未知关系别名。”
为什么 Doctrine 应该能够找出 LEFT JOIN 而不是 INNER JOIN 的别名?
顺便说一句,我意识到 INNER JOIN 和 JOIN 只是名义上的不同,但为什么要实现更具体的而不是规范的、自然的呢?