2013-03-04 56 views
2

我试图与ORDER BY查询像这样的本地SQL主义查询生成器,CASE当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中使用条件查询构建器使用条件?

回答

2

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

+0

我正在使用PostgreSQL,我正在尝试写出“CASE WHEN”原则的查询。我是否需要添加支持扩展? – Developer 2016-12-14 11:59:36