2013-03-04 53 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