Doctrine查询生成器,在ORDER BY中的情况

时间:2013-03-04 05:03:24

标签: doctrine-orm doctrine-query

我正试图在Native SQL中使用ORDER BY进行查询

ORDER BY CASE `promotion` WHEN 0 THEN `net_price`
   ELSE `promotion_price`
  END DESC, `net_price` DESC

像这样的东西

$qb->orderBy('CASE `products.promotion` WHEN 0 THEN `products.net_price`
   ELSE `products.promotion_price`
  END', 'DESC');
$qb->orderBy('products.net_price', 'DESC');

不起作用,我收到意外情况的错误。

所以我尝试了这个:

$qb->addSelect('CASE products.promotion WHEN 0 THEN products.net_price ELSE products.promotion_price END price');
$qb->orderBy('products.price', 'DESC');

这次我得到

'promotion WHEN': Error: Invalid PathExpression. Must be a StateFieldPathExpression.

在这两种情况下,我都尝试将其放在括号中,因为我发现很少有帖子说它有帮助,不幸的是,我只是在第一种情况下将错误信息更改为意外)

Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ')'

为第二个。

问题是:是否可以使用doctrine查询构建器在ORDER BY中使用条件?

1 个答案:

答案 0 :(得分:3)

CASE构造是特定于供应商的,默认情况下不属于Doctrine 2。但是,您可以查看DoctrineExtensions。您可以将IfElse函数用于您的用例。