首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在DQL中按计算值排序

如何在DQL中按计算值排序
EN

Stack Overflow用户
提问于 2013-03-07 04:40:04
回答 2查看 13.1K关注 0票数 17

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

代码语言:javascript
复制
SELECT * FROM table
ORDER BY prop = 'value' DESC;

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

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

我得到一个Doctrine语法错误,'end of string‘。我研究过创建自定义函数,但这似乎有点过头了。我是Doctrine的新手,有没有更好的方法呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-07 18:56:32

从Doctrine ORM2.2开始,您可以使用HIDDEN关键字并选择其他字段,在本例中使用CASE表达式:

代码语言:javascript
复制
SELECT
    e,
    CASE WHEN e.prop = :value THEN 1 ELSE 0 END AS HIDDEN sortCondition
FROM
    Entity e
ORDER BY
    sortCondition DESC
票数 44
EN

Stack Overflow用户

发布于 2015-05-17 20:37:38

我费了好大劲才弄清楚如何使用php语法创建这个查询,下面是我的想法:

代码语言:javascript
复制
$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');
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15257538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档