我尝试根据查询结果是否与属性上的原始实体匹配来对它们进行排序。我可以通过以下查询在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语法错误,'end of string‘。我研究过创建自定义函数,但这似乎有点过头了。我是Doctrine的新手,有没有更好的方法呢?
发布于 2013-03-07 18:56:32
从Doctrine ORM2.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发布于 2015-05-17 20:37:38
我费了好大劲才弄清楚如何使用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');https://stackoverflow.com/questions/15257538
复制相似问题