我收到以下错误:
[语义错误]第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'
不确定我做错了什么......
答案 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%肯定。