doctrine-orm - Doctrine Query Builder, CASE WHEN in ORDER BY

标签 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');

不起作用,我收到了意外 CASE 的错误。

所以我试过这个:
$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 ')'

对于第二个。

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

最佳答案

CASE构造是特定于供应商的,默认情况下不是 Doctrine 2 的一部分。但是,您可以查看 DoctrineExtensions .您可以使用 IfElse适用于您的用例的功能。

关于doctrine-orm - Doctrine Query Builder, CASE WHEN in ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194888/

相关文章:

php - 为商店订单生成唯一的序列号

mysql - Symfony2 查询语法错误

php - Doctrine 2 无法运行 SELECT 查询问题

php - 学说左加入多对一

php - Doctrine SoftDelete 一对一关系

symfony - 使用学问查询构建器的“不在哪里”查询

mysql - 为什么在 Doctrine 1.1.2 中使用 DQL 将 "s.d IS NULL"添加到我的 where 子句中(使用 leftJoin)?

symfony - 有效地迭代大型 OneToMany – ManyToOne 关联

php - Doctrine 2 - 多数据库配置和使用

mysql - 选择查询并根据条件进行计数