4

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 ')'

2枚目用。

質問は次のとおりです:Doctrineクエリビルダーを使用してORDER BYで条件を使用することは可能ですか?

4

1 に答える 1

3

CASE構築はベンダー固有であり、デフォルトでは Doctrine 2 の一部ではありません。ただし、 DoctrineExtensionsを調べることができます。ユースケースにIfElse関数を使用できます。

于 2013-03-04T09:20:05.803 に答える