How to order by a computed value in DQL

doctrine-orm, dql

Solution

Since Doctrine ORM 2.2, you can use the `HIDDEN` keyword and select additional fields, in this case with a CASE expression:

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

Problem

I'm trying to order the results of my query by whether or not they match my original entity on a property. I could do this easily in mySQL with the following query: ``` SELECT * FROM table ORDER BY prop = 'value' DESC; ``` However, in Doctrine, when I attempt the following: ``` // $qb is an instance of query builder $qb->select('e') ->from('Entity', 'e') ->orderBy('e.prop = :value', 'DESC') ->setParameter('value', 'value'); // grab values ``` I get a Doctrine syntax error, 'end of string'. I looked into creating a custom function, but that seems like overkill. I'm fairly new to Doctrine, is there a better way to do this?

Original source