Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 执行自定义mysql查询和;错误:路径表达式无效。必须是StateFieldPathExpression“;_Php_Mysql_Symfony_Doctrine - Fatal编程技术网

Php 执行自定义mysql查询和;错误:路径表达式无效。必须是StateFieldPathExpression“;

Php 执行自定义mysql查询和;错误:路径表达式无效。必须是StateFieldPathExpression“;,php,mysql,symfony,doctrine,Php,Mysql,Symfony,Doctrine,我是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

我是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列靠近“类别,平均值(ri.value),r”:错误:无效的PathExpression。必须是StateFieldPathExpression

不知道为什么,有人能帮忙吗

编辑:

我已将所选项目更改为:

'SELECT c,r,ri,cat.name,AVG(ri.value) as avarage 
我没有得到错误,但我得到了错误的项目(只有一个-它应该是其中的4个)。我只需要选择表的选定列,而不是全部


注:如果我的语言(英语)不太好,很抱歉:D

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


尝试改用
getArrayResult()

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

我使用的方法如下:

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

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

    return $result;
}
公共函数myCustomQuery(){
$sql=
准备($sql);
$myQuery->execute();
$result=$myQuery->fetchAll();
返回$result;
}

这可能是一个问题:

r as avarage

我不确定你想得到什么,但我想应该是
r
(表中的所有列)或
r.column\u名称为avarage
,因为
r
已经是表的别名了

对不起,我的错了。它应该是:“cat.name,ri.category,AVG(ri.value)作为avarage,r”,但它仍然不会改变任何东西。