我目前正在一个项目中使用 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 = ?
但是,我总是得到一个“ON 子句中的未知列 a0_.student_id”但 student_id 列确实存在于 Applications 表中。
我用谷歌搜索了一下,发现这个链接http://www.oscommerce-fr.info/faq/qa_info.php?qID=198(抱歉是法语)说在 MySQL 5.0.12 之后,解析器发生了变化,并且当您有多个 FROM 子句(这是我的情况)时,您必须添加括号。
如果我通过更改来重写 SQL 代码: FROM Applications a0_, Missions m2_
至 :
FROM (Applications a0_, Missions m2_)
有用 !但是我不知道如何在 DQL 代码中添加这些括号(我尝试过,但失败了)。
所以也许这是一个错误,只要你有多个 FROM 子句,Doctrine 2 就应该插入括号,或者我错了?