Что не так с моим DQL-запросом? - PullRequest
2 голосов
/ 21 октября 2010

У меня следующий запрос 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 отличаются только номинально, но зачем реализовывать более конкретную, а не каноническую, натуральную одну?

1 Ответ

2 голосов
/ 22 октября 2010
    ->select('b.*')
    ->from('Bank b')
    ->leftJoin('b.Branch h')

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

http://www.doctrine -project.org / документация / ручной / 1_1 / а / DQL-доктрина-запросы язык: нарисуй синтаксис

...