😄
Laravelでリレーション先のデータを取得するメモ
Laravelでリレーション先のデータを取得するメモ
結構便利だったので、メモする
基本的な使用
Modelファイルで定義したリレーションメソッドをwithで指定する。
Model::with('リレーションメソッド')->get()
また配列でも渡すことができる。配列の場合は、複数指定できる
Model::with(['リレーションメソッド1','リレーションメソッド2'])->get()
モデルにリレーションがある場合、
例)
- ユーザーが多数の投稿を持っている。
- そのユーザーはプロフィール情報を持っていて、そこにプロフィール画像がある。
- 1つの投稿はカテゴリが1つ指定できる。
- またその投稿を取得するときは、ユーザーネームとプロフィール画像を同時に取得しなければいけない
ER図
Model::
// 色々なqueryなど
->with(['user:id,name', 'user.profile:user_id,profile_photo', 'category'])
->get();
ネストしたモデルからデータを取得
user.profile
のように.
でつなぐことでネストしたモデルのデータを取得することができる。
特定のカラムのみ取得
user:id,name
のような形で外部キーと取得したいカラムを指定する。注意点としては外部キー(今回の場合、id, user_id)を指定しないとnullが返ってくるので、必ず指定しなければいけない。
最後に
コードやER図など間違っていることがあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion