У меня следующий запрос 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 должен быть в состоянии определить псевдоним для ЛЕВОГО СОЕДИНЕНИЯ, но не для ВНУТРЕННЕГО СОЕДИНЕНИЯ?
Кстати, я понимаю, что INNER JOIN и JOIN отличаются только номинально, но зачем реализовывать более конкретную, а не каноническую, натуральную одну?