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

それはまさに私が期待するものを返します。

次に、次の 2 つの 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 の公式結合ドキュメント here から、「DQL は INNER JOIN と LEFT JOIN の 2 種類の結合をサポートしている」と書かれています。私にはまったくわからない何らかの理由で、彼らは自然結合をサポートしないことを選択しました。とにかく、それが意味することは、上記の 2 つのクエリが私の唯一の選択肢だということです。どちらも機能しないので、残念です。

最初のクエリ (左結合を使用するクエリ) は機能しません。もちろん、左結合と自然結合は 2 つの異なるものだからです。

2 番目のクエリも機能しません。不可解なことに、「不明なリレーション エイリアス」というエラーが表示されます。

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 に答える