17

プロパティの元のエンティティと一致するかどうかによって、クエリの結果を並べ替えようとしています。次のクエリを使用して、mySQL でこれを簡単に行うことができます。

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

ただし、Doctrine では、次のことを試みると:

// $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にかなり慣れていません。これを行うためのより良い方法はありますか?

4

2 に答える 2

44

Doctrine ORM 2.2以降、HIDDENキーワードを使用して追加のフィールドを選択できます。この場合は、CASE式を使用します。

SELECT
    e,
    CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition
FROM
    Entity e
ORDER BY
    sortCondition DESC
于 2013-03-07T10:56:32.083 に答える
20

PHP構文を使用してそのクエリを作成する方法を理解するのにしばらく苦労したので、私が思いついたのは次のとおりです。

$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');
于 2015-05-17T12:37:38.370 に答える