执行自定义mysql查询和“错误:无效的PathExpression。必须是StateFieldPathExpression”

时间:2014-01-13 11:01:38

标签: php mysql symfony doctrine

im'新手'在Symfony :) 我试图执行这个SQL:

SELECT cat.name, ri.category_id,AVG(ri.value) as avarage FROM company c
JOIN reviews r ON r.company_id = c.id
JOIN reviews_items ri ON ri.review_id = r.id
JOIN category cat ON ri.category_id = cat.id
WHERE c.id = 1
GROUP BY ri.category_id

在Symfony2学说中:

$cats = $this->getEntityManager()
        ->createQuery(
            'SELECT cat.name, ri.category, AVG(ri.value),r as avarage 
            FROM DiligesDiligesBundle:Company c
            JOIN c.reviews r
            JOIN r.reviews ri
            JOIN ri.category cat
            WHERE c.id = 1
            GROUP BY ri.category'
        )->getResult();

但它给了我一个错误:

  

[语义错误]第0行,第20行附近'类别,AVG(ri.value),r':错误:无效的PathExpression。必须是StateFieldPathExpression。

不知道为什么,有人可以帮忙吗?

修改

我已将所选项目改为toto:

'SELECT c,r,ri,cat.name,AVG(ri.value) as avarage 

并且我没有得到错误但是我得错了项目(只有一个 - 它应该是4个)。我需要选择刚刚选定的表格列,而不是所有表格。

PS。对不起,如果我的语言(英语)不太好:D

3 个答案:

答案 0 :(得分:2)

不确定您是否可以通过这种方式直接在查询构建器中强制转换自定义SQL。

我使用的方法如下:

public Function myCustomQuery() {
    $sql = 
    <<<EOF
        MY_SQL_CODE_HERE
    EOF
    ;

    $myQuery = $this->getEntityManager()->getConnection()->prepare($sql);
    $myQuery->execute();
    $result = $myQuery->fetchAll();

    return $result;
}

答案 1 :(得分:0)

我认为您的查询看起来不错,但是,您将无法调用getResult(),因为它不是您要检索的实体。

尝试使用getArrayResult()代替......

答案 2 :(得分:0)

这可能是一个问题:

r as avarage

我不确定你想要到达那里但我想它应该只是r(表中的所有列)或r.column_name as avarage因为r已经是表的别名< / p>