LoginSignup
7
9

More than 3 years have passed since last update.

Laravel リレーションの取得 withメソッド

Posted at

withでeagerloadする

紐づいたテーブルから大量にデータ取得する場合、何度もDBアクセスしてデータを取得するとレスポンスがわるくなるので、リレーションを取得するときはwithを使う。

使い方

下記のようにするとwithメソッドが利用可能

Model::with('リレーション名')->get();

実際の例

1対多の関係(Personが複数のBoardを持っている)
親:person
 ・[id, name, email, age]
子:Board
 ・[id, person_id, title, message]
withを使うと下記のような流れで値を取得できる。
※hasMany, belongsTo等、正しく設定されていること前提
①Boardだけを取得
②取得したBoardのperson_idの値をまとめ、それらのIDのPersonを取得

Board.php
$boards = Board::with('person')->get();
return view('boards.index', ['boards' => $boards])
Boards/index.blade.php
# こうすると親の値も取得できる
@foreach($boards as $board)
  <p>{{ $board->message }}</p>
  <p>{{ $board->person->name }}</p>
@endforeach

上記は子から親を取得しているが、これの逆パターンをすれば親から子の取得も可能

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9