Laravelでカラムに対する指定したデータのレコードを最初に取得する方法

13 回閲覧されました
みなさんこんにちは、jonioです。
テーブルのデータを取得する時に特定のカラムのデータがいっぱいある中で指定した値を一番最初に取得したい場合があると思います。
例えばリストに並べる時に「あいうえお」のデータをリストの最初に表示する時とか。
こんな時の記述方法について解説します。
Laravelの無料学習サイトを作りました
Laravelを勉強したい人向けの無料の学習サイトを作りました。
ここからリンクに飛べますのでぜひ利用してください。
前提条件
Ajaxを使ってコントローラーからフロントにデータを返すのを想定しています。
フロントで使う言語はReact・Vue・jQuery・JavaScriptに対応できます。
コントローラー
モデル名を「Demo」としてカラム名を「column」として先頭に表示したいデータを「あいうえお」とします。
下記の記述をします。
public function fetchData()
{
$table = Demo::orderByRaw("CASE WHEN demo.column = 'あいうえお' THEN 0 ELSE 1 END")
->orderBy('demo.column')
->get();
return response()->json([
'success' => true,
'table' => $table,
]);
}
7行目〜9行目はAjaxを使っているので記述していますが今回の解説には関係がないです。
核の部分は3行目〜5行目です。
4行目のorderByを使うと「あいうえお」以外のデータを昇順に並べることができます。
これは「あいうえお」以外のデータの並び順を指定したい場合に必要です。
とにかく「あいうえお」だけを最初にすればいい場合は必要がないです。
3行目の「orderByRaw」はSQLで順番を指定する為のメソッドです。
「CASE WHEN demo.column = ‘あいうえお’ THEN 0」がcolumnカラムの「あいうえお」のデータを0番目に取得して「ELSE 1 END」が他のデータは1番目に取得するという意味になります。
「0」と「1」が気になると思いますが並び順を最初にしたいデータの値が小さければいいので0でなくてもいいです。
例えば「THEN 1 ELSE 2 END」や「THEN 5 ELSE 8 END」とかでも大丈夫です。
これで「あいうえお」のデータを最初に取得することができます。