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