2

我有以下 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 只是名义上的不同,但为什么要实现更具体的而不是规范的、自然的呢?

4

1 回答 1

2
    ->select('b.*')
    ->from('Bank b')
    ->leftJoin('b.Branch h')

    ->select('b.*')
    ->from('Bank b')
    ->innerJoin('b.Branch h')

http://www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language:join-syntax

于 2010-10-21T20:00:49.003 回答