Laravel 9.18.0 がリリースされました。マイナーアップデートであり、多少便利になる細かい積み重ねがほとんどです。
Release v9.18.0 · laravel/framework
このリリースの中にあった Added ability to define "with" relations as a nested array (#42690)
が特別便利そうですので紹介します。
内容はおおよそプルリクエストの題の通りで、 with にリレーションをネストした配列として定義する能力を追加した、というものです。実際は load メソッドの様な後付けでリレーションを呼ぶときも同様にネストした配列を使えます。これによりこれまでは次の様に記述していた部分が
User::with([ 'avatar', 'posts.tags', 'posts.author', 'posts.featureImage', 'posts.comments.tags' => fn ($q) => $q->latest(), ])->get();
次の様にできます。
User::with([ 'avatar', 'posts' => [ 'tags', 'author', 'featureImage', 'comments' => [ 'tags' => fn ($q) => $q->latest(), ], ], ])->get();
特に便利なのがチェーンするパターンです。
User::with([ 'posts' => fn ($q) => $q->withCount('comments')->with([ 'comments' => [ 'tags', ], ]), ])->get();
詳しい挙動を試し切っていないですが、これを用いることでリレーションの途中に where 等をはさむコードを読みやすくできそうです。使い方の例はプルリクエストに含まれている次のテストケースを読むと分かりやすいです。