2013-03-06 18 views
8

私のクエリの結果は、プロパティ上の元のエンティティと一致するかどうかによって並べ替えようとしています。私は次のことをしようとする教義に、しかしDQLで計算された値で注文する方法

SELECT * FROM table 
ORDER BY prop = 'value' DESC; 

:私は次のクエリを使用してMySQLに簡単にこれを行うことができます

// $qb is an instance of query builder 
$qb->select('e') 
    ->from('Entity', 'e') 
    ->orderBy('e.prop = :value', 'DESC') 
    ->setParameter('value', 'value'); 
// grab values 

を私はDoctrineの構文エラーを取得し、「文字列の末尾に」。私はカスタム関数を作成する方法を検討しましたが、それは過度のようです。私はDoctrineをかなり新しくしました。これを行う良い方法はありますか?

答えて

22

ドクトリンORM 2.2以来、あなたはCASE表現で、この場合には、HIDDENキーワードを使用して、追加のフィールドを選択することができます:私はPHPを使用してそのクエリを作成する方法を見つけ出すためにしばらくstruggeledとして

SELECT 
    e, 
    CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition 
FROM 
    Entity e 
ORDER BY 
    sortCondition DESC 
+0

これは完全に機能しました!ありがとう! – SnailCoil

11

ここに私が思いついた文法があります:

$value = 'my-value';  
$qb->select('e') 
    ->from('Entity', 'e') 
    ->addSelect('CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition') 
    ->setParameter('value', $value) 
    ->addOrderBy('sortCondition', 'DESC'); 
関連する問題