Doctrine2 - 语义错误,即使错误中的列存在

时间:2013-07-04 02:11:00

标签: doctrine-orm

我收到以下错误:

  

[语义错误]第0行,第15行附近'question_id)':错误:类Acme \ MyBundle \ Entity \ SurveysQuestions没有名为question_id的字段或关联

我在PhpMyAdmin的SurveysQuestions中,是的,它有一个question_id字段:

survey_id       question_id       score
7               1                 3.5
7               2                 4

etc.

查询是:

'SELECT COUNT(sq.question_id) AS votes, sq.score AS score, q.question FROM MyBundle:SurveysQuestions sq LEFT OUTER JOIN sq.question q WHERE q.id = :id AND q.deletedAt IS NULL GROUP BY q.id, sq.score ORDER BY sq.score DESC'

不确定我做错了什么......

1 个答案:

答案 0 :(得分:1)

您正在编写SQL,但是Doctrine期望DQL,您应该阅读Doctrine Query Language一章。

我在查询中一眼就看到了两个问题:

  • 您不应该查询表列(sq.question_id),您必须查询类属性。 sq.question_id列是一个外键,在您的类中不存在,您可能想要使用q.id。

  • 您正在选择一个COUNT()和sq.score字段,它将返回一个数组而不是一个对象,因为您选择的是特定字段而不是实体。如果你期待一个数组,那很好,但是如果你想要一个对象,你必须写“SELECT COUNT(q.id)作为投票,sq ...”。如果您只想要这两个字段,但仍然收到一个对象,则必须使用部分语法“SELECT PARTIAL COUNT(q.id),sq。{score}”

  • 我不确定Doctrine是否接受LEFT OUTER JOIN,我认为它只接受LEFT JOIN(也是如此),但我对此并不是100%肯定。