Laravelクエリビルダを使って条件分岐をSQLのCASE式で実行する

PHPで条件分岐を行う際は大方if分を使用するかと思いますが
集計機能を実装する際にorderByをしたいがあるテーブルでは値を文字列で保存しており
違うテーブルでは数値で保存しているといったケースがたまにあります。
そういう時はSQL文の中で条件分岐をしてしまえばorderByで一緒にまとめることができるのでコードがスッキリ書けて便利です。

LaravelでCASE式を書く方法

SQL文を直接使う場合はDB::rawでSQL文を生成出来ます。
またselectRawメソッドでも同様の処理を書くことができます。

$query->select(DB::raw("CASE
    WHEN users.gender = '男' THEN 1
    WHEN users.gender = '女' THEN 2
    ELSE 9999
END));
$query->selectRaw("CASE
    WHEN users.gender = '男' THEN 1
    WHEN users.gender = '女' THEN 2
    ELSE 9999
END);

レコードの存在によって出力する値を変える際とかにも便利です。

$query->selectRaw("CASE
    WHEN users.nickname IS NOT NULL THEN users.nickname
    WHEN users.name IS NOT NULL THEN users.name
    ELSE '名無しさん'
END AS name);

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。