Laravelのリレーション先で並び替えをする〜orderByやsortBy〜
2022-05-23
2022-05-23
3 min read
Laravel
orderByとsortByについて
Laravelで並び替えを行う際、orderByやsortByのメソッドを使用することが多いと思います。
orderByとsortByの違いをざっく言うと、
- データ取得時に並び替える場合はorderBy
- 格納しているデータ(コレクション)を並び替える時はsortBy
という感じになります。
以下例になります。
orderBy
- データベースからデータを取得する際の並び替えに使用します。
$flights = User::where('active', 1)
->orderBy('name')
->get();
sortBy
- コレクションのデータを並び替える際に使用します。
$flights = User::where('active', 1)
->get()
->sortBy('name');
リレーション先での並び替えについて
Laravelでは、hasManyなどを用いて定義したリレーション関係をのデータを、withメソッドで取得することができます。
このときに取得するリレーション先のデータを並び替えたいというのが、今回の内容になります。
今回はデータ取得時の並び替えを想定しているので、リレーション関係を定義する際にorderByを記述します。こうすることでリレーション先での並び替えを行うことができます。
例題
下記のような設計のテーブルを考えます。
親 : user(ユーザー)
| キー | カラム名 |
|---|---|
| PK | user_id |
| user_name |
子 : post(投稿)
| キー | カラム名 |
|---|---|
| PK | post_id |
| FK | user_id |
| post_title | |
| post_content |
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で並び替えることができます。