ひでメモ

プログラムについて勉強したことを書きます。たぶん。

LaravelのEager Loading(複数・ネスト)

Laravelでモデルにリレーションを設定して、withメソッドでその参照先を引いてきてくれる機能、Eager Loadingっていうんですね。

laravel.com

これを複数設定していたり、参照先で引いてきた先でもさらにリレーションが設定してあって(ネストでいいんですかね?)それも取得したいという場合です。

  • 複数

withメソッドの引数で、カンマ区切りで複数指定することができます。

$post = Post::where('id', $id)->with(['user', 'image'])->first();
  • ネスト

withメソッドの引数で、「リレーション名.参照先のリレーション名」で指定します。

$post = Post::where('id', $id)->with(['reply.user', 'reply.image'])->first();

例のようにネストのリレーションを複数指定した場合でも、同じreplyというオブジェクトが重複して返ってくるわけではなく、以下みたいになります。賢いですね。

reply =>
[
      <replyのプロパティ>,
      user => [
         <userのプロパティ>
     ],
      image=> [
         <imageのプロパティ>
     ],
]

リレーション先の特定の列だけ取得したりもできるみたいです。めっちゃ便利ですね!(Laravelが初フレームワーク勢の感想)