2011-07-21 70 views
1

這是我的查詢:學說2的QueryBuilder設置的參數不工作

公共職能getDetails($用戶ID,$排序依據,$排序){

$query = $this->_em->createQueryBuilder() 
       ->select('u') 
       ->from('\Entities\Users', 'u') 
       ->where('u.userid= ?1') 
       ->orderBy('u.?3', '?3') 
       ->setParameter(1, $userid) 
       ->setParameter(2, $orderby) 
       ->setParameter(3, $sort) 
       ->getQuery() 
       ->getResult(); 

} 

它使示數:消息:語義錯誤]第0行,col 83'3 DESC'附近:錯誤:'?3'未定義。

如何從該函數中的屬性獲取orderby到查詢?

回答

3

您不能使用佔位符來構建DQL查詢。你必須通過自己的代碼是:

$sortBy = in_array($sortBy, array(...)) ? $sortBy : 'id'; 
$sortDir = $sortDir == 'ASC' ? 'ASC' : 'DESC'; 

$this->em->createQueryBuilder() 
    ... 
    ->orderBy('u.' . $sortBy, $sortDir) 
+2

主義有許多痛苦的缺點。它速度慢,複雜而且相當有限。很難看出這比直接的php/sql存儲過程更好。 – Acyra

1

你不能綁定參數的QueryBuilder,只能查詢,所以就換線,先把查詢出建設者,然後填入參數,並得到結果。

$query = $this->_em->createQueryBuilder() 
      ->select('u') 
      ->from('\Entities\Users', 'u') 
      ->where('u.userid= ?1') 
      ->orderBy('u.?3', '?3') 
      ->orderBy('u.'.$orderBy, $sort) 
      ->getQuery() 
      ->setParameter(1, $userid) 
      ->getResult(); 

} 

在教義2.4中它是固定的,你可以將參數綁定到QueryBuilder。

更新:我錯過了佔位符在字段名稱的時刻,SQL不支持這樣的結構。

+0

這應該是被接受的答案。 – dualmon