How to order by a computed value in DQL

ⅰ亾dé卋堺 提交于 2019-11-30 14:49:50

问题


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?


回答1:


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



回答2:


As I struggeled a while to figure out how to create that query using php syntax here's what I came up with:

$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');


来源:https://stackoverflow.com/questions/15257538/how-to-order-by-a-computed-value-in-dql

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!