原则2和“未知专栏”ON条款“

时间:2011-09-11 13:00:30

标签: doctrine doctrine-orm clause on-clause

我目前正在使用与ZF一起使用Doctrine 2的项目。到现在为止还挺好。但是我有一个看起来像个bug的问题。

我在我的一个存储库中编写了以下代码:

$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表中。

我google了一下,发现这个链接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代码中添加这些括号(我试过,但它失败了)。

所以也许这是一个错误,只要你有多个FROM子句,Doctrine 2就应该插入括号,或者我错了?

1 个答案:

答案 0 :(得分:0)

Okey,感谢此链接: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';