Doctrine是否能够按特定值对结果进行排序?
我试着做这样的事情......
$queryBuilder->addOrderBy($queryBuilder->expr()->eq('t0.ID',$ID));
$queryBuilder->addOrderBy('t0.ID');
要获得类似这样的查询,将返回。
select ID from test order by ID = '1234', ID;
例外:
Syntax Error line 0 col 72: Error: Expected end of string got '='
我也试过使用FIND_IN_SET,但这也不起作用。
有人能帮助我吗?
答案 0 :(得分:6)
如果您使用Symfony,可以添加Doctrine extension(this),这样您就可以使用MySql IF
语句,然后在查询中可以:
$qb->addSelect('IF(t0.ID = 1234, 1, 0) AS HIDDEN mainSort')
然后您可以使用
进行排序$qb->orderBy('mainSort', 'DESC');
<强>更新强>
如果您不想添加Doctrine扩展,可以使用常规SQL的CASE
语句,这样:
$qb->addSelect('(CASE WHEN t0.ID = 1234 THEN 1 ELSE 0 END) AS HIDDEN mainSort')
答案 1 :(得分:-1)
您无法在ORDER BY order by ID = '1234'
中设置值,这对于SQL来说是正常的。而是使用SELECT ID FROM test WHERE ID = '1234' ORDER BY ID ASC
在学说中,这将是这样的:
$qb->select('t')
->from('Test t')
->where('t.id = :identifier')
->orderBy('t.id', 'ASC')
->setParameter('identifier', 1234);