2014-01-13 91 views
0

IM '新手' :) 我試着去執行這個SQL:執行定製的MySQL查詢和 「錯誤:無效PathExpression必須是StateFieldPathExpression」 中的Symfony

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(); 

但它給我一個錯誤:

[Semantical Error] line 0, col 20 near 'category, AVG(ri.value),r': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

不知道爲什麼,一能nyone有幫助嗎?

編輯:

伊夫改變所選項目TOTO:

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

,我不明白的錯誤,但我得到錯誤的項目(只有一個 - 它應該是其中的4個)。我需要選擇剛選好的表格列,而不是全部。

PS。對不起,如果我的語言(英文)不太好:D

回答

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; 
} 
+0

它的工作原理!謝謝! :) – unbreak

0

我認爲你的查詢看起來很好,但是,你將無法呼叫getResult(),因爲它不是你試圖檢索的實體。

嘗試使用getArrayResult(),而不是...

+0

仍然無法正常工作。 – unbreak

0

這可能是一個問題:

r as avarage 

我不知道什麼ü要到那裏,但我想它應該是公正r(表中的所有列)或r.column_name as avarage,因爲r是表格的別名

+0

對不起,我的壞。它應該是: 'cat.name,ri.category,AVG(ri.value)作爲avarage,r' 但它仍然沒有改變任何東西。 – unbreak

相關問題