【Laravel】orderByを複数のカラムに対して使う方法
こんにちは!CODE CLUB965のKです!
今回は、Laravelのクエリビルダにおいて、複数のカラムに対してorderByをしたい場面があったので、そのことについて書こうと思います。
複数カラムに対してorderByを適応する
方法としては以下の2つがあります。
・orderByを複数つなげる
・orderByRawを使用する
ひとつずつ説明します。
1. orderByを複数つなげる
まずは、一番単純でよく使われる方法かと思います。
$users = DB::table('users')
->orderBy('name')
->orderBy('age')
->get();
上記の例は、Usersテーブルがあったとして、「name」というカラムと「age」というカラムに対してorderByしたい場合の書き方になります。
もちろん第二引数に「asc」、「desc」を記述して昇順、降順の指定もできます。
2. orderByRawを使用する
orderByRawを使えば少しスッキリと書けるかもしれません。
$users = DB::table('users')
->orderByRaw("name asc, age desc")
->get();
orderByRawの引数に対象のカラムを書くだけです。
こちらも昇順、降順の指定はできます。
最後に
上記の2つの方法を紹介しましたが、私は最初の書き方をよく見たことがあります。
(どちらがいいかは正直分かりません...好みですかね..教えて下さい)
もうひとつの方法としてモデルにスコープを定義して複数カラムにアプローチする方法もありますが、上記の方法でとりあえずは大丈夫かと思います。
もうひとつの方法についてはまた記事に書けたらと思います。
それでは、また!