N 1 нетерпеливая загрузка в Laravel 8.x Лезвие

#php #laravel #laravel-blade

Вопрос:

Я использую быструю загрузку для комментариев и ответов в своем блоге. Если комментарий в блоге parent_id равен нулю, у меня нет никаких проблем с N 1. Однако в тот момент, когда я назначаю комментарий a parent_id для создания гнезда ответов, это вызывает проблему N 1.

Я пытался разобраться в этой проблеме, и , похоже, она исходит из posts.comments.blade amp; posts.comments-child.blade , но я не могу понять, почему. Любая помощь приветствуется.

Модель посткомиссии

 public function user()
{
    return $this->belongsTo(User::class);
}

public function replies()
{
    return $this->hasMany($this, 'parent_id');
}
 

ПостКонтроллер

 $postComments = PostComment::where([
    'post_id' => $post->id,
    'parent_id' => null
])->with('user', 'replies')->get();
 

главное.лезвие

 @include('posts.comments', ['comments' => $postComments])
 

posts.comments.blade amp; posts.comments-child.blade

 @foreach ($comments as $comment)
    <h6>{{ $comment->user->name }}</h6>
    <p>{{ $comment->comment }}</p>
    <ul>
        @include('posts.comments-child', ['comments' => $comment->replies])
    </ul>
    <hr>
@endforeach
 

Ответ №1:

Ваша проблема N 1 исходит из <h6>{{ $comment->user->name }}</h6> ответов

Лучше бы они тоже загрузились

 $postComments = PostComment::where([
    'post_id' => $post->id,
    'parent_id' => null
])->with('user', 'replies.user')->get();
 

У вас все равно будет проблема, если в ответах будет больше ответов и так далее.