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 回答