LaravelのEager Loading(複数・ネスト)
Laravelでモデルにリレーションを設定して、withメソッドでその参照先を引いてきてくれる機能、Eager Loadingっていうんですね。
これを複数設定していたり、参照先で引いてきた先でもさらにリレーションが設定してあって(ネストでいいんですかね?)それも取得したいという場合です。
- 複数
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が初フレームワーク勢の感想)