В Laravel есть функция Eager Loading, которая будет полезна в вашем случае.Eager Loading позволяет вам автоматически загружать отношения вместе с тем же запросом, который вы используете для получения основной информации о модели.https://laravel.com/docs/5.8/eloquent-relationships#eager-loading
Вы можете указать следующие коды.
Самый простой способ:
$post = Post::with('comments.author', 'user')
->find($id);
Или запрос точной настройки с обратным вызовом:
$post = Post::with(['comments' => function ($q) {
// if you use comments select, then you need to specify foreign key too
$q->select('id', 'author_id', 'details') // comment fields
->latest(); // Use chaining method
// OR use $q = $q->latest();
},
'comments.author' => function ($q) {
$q->select('id', 'username'); // author fields
},
'user' => function ($) {
$q->select('id', 'username'); // user fields
}])
->find($id);
В некоторых случаях вам могут потребоваться некоторые модификации, но в целом, чтобы избежать проблемы N+1
запросов.