Laravelのリレーション先で並び替えをする〜orderByやsortBy〜
2022-05-23
2022-05-23
3 min read
Laravel
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 |
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で並び替えることができます。