2013-03-06 56 views
8

我试图通过是否匹配我的原始实体属性来查询我的查询结果。我可以很容易地将MySQL与下面的查询做到这一点:如何通过DQL中的计算值进行订购

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

然而,在学说,当我尝试以下操作:

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

我得到一个主义语法错误,“字符串的结束”。我研究创建一个自定义函数,但这似乎是矫枉过正。我对Doctrine相当陌生,有没有更好的方法来做到这一点?

回答

22

由于学说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 
+0

这工作完美!谢谢! – SnailCoil 2013-03-07 15:34:51

11

正如我struggeled一段时间才能弄清楚如何创建一个查询使用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');