【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つの方法を紹介しましたが、私は最初の書き方をよく見たことがあります。
(どちらがいいかは正直分かりません...好みですかね..教えて下さい)

もうひとつの方法としてモデルにスコープを定義して複数カラムにアプローチする方法もありますが、上記の方法でとりあえずは大丈夫かと思います。

もうひとつの方法についてはまた記事に書けたらと思います。

それでは、また!

Follow me!