はじめに
リレーションの関係にある親モデルと子モデルのデータを一度に取得したいと考え、with関数
にたどり着く。
これまで使ってこなかったのでどのような関数なのか理解するためにまとめていく。
前提(モデル定義)
親モデル(User)と子モデル(UserCourse)は以下のようにリレーション関係にある。
Controller.php
class User extends Model
{
public function userCourses()
{
return $this->hasMany(UserCourse::class);
}
}
class UserCourse extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
with関数を使ってみる
with関数を使用して、UserモデルとUserCourseモデルを一度に取得する場合は、以下のように書く。
$users = User::with('userCourses')->get();
これにより、Userモデルのインスタンスが取得され、各UserインスタンスにはuserCoursesリレーションに関連するUserCourseモデルのインスタンスが含まる。
また下記のように1件だけ取ってくるなども可能。
$user = User::with('userCourses')->find($id);
以上。