次の 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 は名目上の違いだけだと思いますが、標準的な自然なものではなく、より具体的なものを実装するのはなぜですか?