ホーム > cakephp | 技術系 > cakephp3でorder byにcase文を使用する

cakephp3でorder byにcase文を使用する

cakephp3で、order by 句にcase文を使用したいケースがあったので、メモです。

今回実装したかったのは以下の内容です。

特定のテーブルから、

(1) あるカラムがAまたはBのグループを先頭に持ってきて

(2) その後に(1)でないグループを表示

(3) (1)(2)が同じ条件場合は、別のカラムの値降順で表示

以下のような実装で実現できました。

// モデルでの実装の例
$query = $this->find();

// CASE WHEN ((カラム名 = A) or (カラム名 = B)) THEN 1 ELSE 2 END
$case = $query->newExpr()
                ->addCase(
                    $query->newExpr()->add([
                        'OR' => [
                            'カラム名' => A,
                            'カラム名' => B
                        ]
                    ]),
                    [1, 2],
                    ['integer', 'integer']
                );

$query->order([
    $case,
    カラム名 => 'DESC'
]);

/* これで、
select * from table order by (CASE when (カラム名 = A or カラム名 = B) THEN 1 ELSE 2 END), カラム名 DESC
と同じものが実行できました
*/

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
https://www.itblog.jp/wp-trackback.php?p=9995
トラックバックの送信元リスト
cakephp3でorder byにcase文を使用する - ITblog より

ホーム > cakephp | 技術系 > cakephp3でorder byにcase文を使用する

フィード

ページの上部に戻る