2013-08-07 70 views
3

是教義能夠按特定值排序結果嗎?Doctrine2 OrderBy具體價值

生病嘗試做這樣的事情..

$queryBuilder->addOrderBy($queryBuilder->expr()->eq('t0.ID',$ID)); 
$queryBuilder->addOrderBy('t0.ID'); 

爲了得到這樣的查詢將返回。

select ID from test order by ID = '1234', ID; 

例外:

Syntax Error line 0 col 72: Error: Expected end of string got '=' 

我還試圖用FIND_IN_SET但這並不工作,太。

有人可以幫我嗎?

回答

-1

您無法在ORDER BY order by ID = '1234'中設置值,這對於SQL來說是正常的。而是使用SELECT ID FROM test WHERE ID = '1234' ORDER BY ID ASC

在教義,這將是這樣的:

$qb->select('t') 
    ->from('Test t') 
    ->where('t.id = :identifier') 
    ->orderBy('t.id', 'ASC') 
    ->setParameter('identifier', 1234); 
+0

好吧,我想我不是很清楚。我想要所有的結果,所以這裏的部分是不必要的。再次,我想要所有的結果,但結果應該按照特定的順序。我首先需要所有具有id =「1234」的文檔,然後根據id排序其他id。教義是否能夠做到這一點? – Stillmatic1985

+0

我甚至不認爲SQL能夠做到這一點,也許有一些沉重的詭計。取得結果後最好這樣做。 – Flip

5

您可以(如果你使用的Symfony this)添加Doctrine extension所以你可以使用MySQL IF聲明,然後在您的查詢,你可以:

$qb->addSelect('IF(t0.ID = 1234, 1, 0) AS HIDDEN mainSort') 

那麼你可以通過它使用

$qb->orderBy('mainSort', 'DESC'); 
排序

更新

如果你不希望添加主義的擴展,可以使用CASE聲明這是常規的SQL,這樣一來:

$qb->addSelect('(CASE WHEN t0.ID = 1234 THEN 1 ELSE 0 END) AS HIDDEN mainSort')