😄

Laravelでリレーション先のデータを取得するメモ

2024/08/18に公開

Laravelでリレーション先のデータを取得するメモ

結構便利だったので、メモする

基本的な使用

Modelファイルで定義したリレーションメソッドをwithで指定する。

Model::with('リレーションメソッド')->get()

また配列でも渡すことができる。配列の場合は、複数指定できる

Model::with(['リレーションメソッド1','リレーションメソッド2'])->get()

モデルにリレーションがある場合、

例)

  1. ユーザーが多数の投稿を持っている。
  2. そのユーザーはプロフィール情報を持っていて、そこにプロフィール画像がある。
  3. 1つの投稿はカテゴリが1つ指定できる。
  4. またその投稿を取得するときは、ユーザーネームとプロフィール画像を同時に取得しなければいけない

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図など間違っていることがあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion