Доктрина 2 и «неизвестный столбец в« предложении ON » - PullRequest
0 голосов
/ 11 сентября 2011

Я сейчас работаю в проекте, который использует Doctrine 2 с ZF. Все идет нормально. Однако у меня есть проблема, которая выглядит как ошибка.

Я написал следующий код в одном из моих репозиториев:

$dql = 'SELECT a, s.firstName, s.lastName FROM Model_Application a, Model_Mission m 
        JOIN a.student s WHERE a.mission = m.id AND m.company = :company';

$result = $this->getEntityManager()->createQuery($dql)
                                   ->setParameter('company', $company)
                                   ->getResult();

Был сгенерирован следующий SQL:

SELECT a0_.coverLetter AS coverLetter0, [... lot of useless things],
a0_.student_id AS student_id5, a0_.mission_id AS mission_id6
FROM Applications a0_, Missions m2_ INNER JOIN Students s3_
ON a0_.student_id = s3_.id LEFT JOIN Users u1_ ON s3_.id = u1_.id
WHERE a0_.mission_id = m2_.id AND m2_.company_id = ?

Однако я всегда получаю «Неизвестный столбец a0_.student_id в предложении ON», НО столбец student_id действительно существует в таблице Applications.

Я немного погуглил и нашел эту ссылку http://www.oscommerce -fr.info / faq / qa_info.php? QID = 198 (извините, по-французски), в которой говорится, что после MySQL 5.0.12 синтаксический анализатор изменился, и вам необходимо добавить круглые скобки, когда у вас есть несколько предложений FROM (как в моем случае).

Если я переписываю код SQL, изменив: Из приложений a0_, миссии m2_

до:

FROM (Applications a0_, Missions m2_)

Работает! ОДНАКО я не знаю, как добавить эти скобки в код DQL (я пытался, но это не удается).

Так что, возможно, это ошибка, и Doctrine 2 должна вставлять скобки, когда у вас есть более одного предложения FROM, или, может быть, я ошибаюсь?

1 Ответ

0 голосов
/ 11 сентября 2011

Окей, решите благодаря этой ссылке: http://www.doctrine -project.org / jira / browse / DDC-1047

Ключ должен изменить порядок DQL:

$dql = 'SELECT a, s FROM Model_Application a JOIN a.student s, Model_Mission m
        WHERE a.mission = m.id AND m.company = :company';
...