如何按DQL中的计算值排序

Sna*_*oil 14 dql doctrine-orm

我正在尝试通过它们是否与属性上的原始实体匹配来对查询结果进行排序.我可以使用以下查询在mySQL中轻松完成此操作:

SELECT * FROM table
ORDER BY prop = 'value' DESC;
Run Code Online (Sandbox Code Playgroud)

但是,在Doctrine中,当我尝试以下操作时:

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

我得到一个Doctrine语法错误,'结束字符串'.我研究了创建一个自定义函数,但这看起来有点过分.我对Doctrine很新,有没有更好的方法呢?

Ocr*_*ius 38

从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
Run Code Online (Sandbox Code Playgroud)


tot*_*tas 15

正如我想了解如何使用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');
Run Code Online (Sandbox Code Playgroud)