logo
Home
About
Works
Blog
Contact

Laravelのリレーション先で並び替えをする〜orderByやsortBy〜

2022-05-23

2022-05-23

3 min read

Laravel

目次


  1. orderByとsortByについて
  2. リレーション先での並び替えについて
  3. 例題

orderByとsortByについて

Laravelで並び替えを行う際、orderBysortByのメソッドを使用することが多いと思います。

orderBysortByの違いをざっく言うと、

  • データ取得時に並び替える場合はorderBy
  • 格納しているデータ(コレクション)を並び替える時はsortBy という感じになります。

以下例になります。

orderBy

  • データベースからデータを取得する際の並び替えに使用します。
orderByの例
$flights = User::where('active', 1)
->orderBy('name')
->get();

sortBy

  • コレクションのデータを並び替える際に使用します。
sortByの例
$flights = User::where('active', 1)
    ->get()
->sortBy('name');

リレーション先での並び替えについて

Laravelでは、hasManyなどを用いて定義したリレーション関係をのデータを、withメソッドで取得することができます。

このときに取得するリレーション先のデータを並び替えたいというのが、今回の内容になります。

今回はデータ取得時の並び替えを想定しているので、リレーション関係を定義する際にorderByを記述します。こうすることでリレーション先での並び替えを行うことができます。

例題

下記のような設計のテーブルを考えます。

親 : user(ユーザー)

キーカラム名
PKuser_id
user_name

子 : post(投稿)

キーカラム名
PKpost_id
FKuser_id
post_title
post_content
Userモデル
public function getData(){
    $result = User::where('user_id', 1)
        ->with(['post'])
        ->get();
}
public function post(){
    return $this->hasMany(Post::class, 'user_id')
->orderBy('post_title', 'asc');
}

このようにhasManyの関係を定義するときにorderByで並び替えることができます。