0

我目前正在一个项目中使用 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 就应该插入括号,或者我错了?

4

1 回答 1

0

好的,感谢这个链接: 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';
于 2011-09-11T17:23:58.753 回答