Doctrine2 OrderBy具体值

时间:2013-08-07 09:06:39

标签: mysql doctrine-orm doctrine

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,但这也不起作用。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:6)

如果您使用Symfony,可以添加Doctrine extensionthis),这样您就可以使用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);