微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 8.x Blade 中的 N+1 急切加载

如何解决Laravel 8.x Blade 中的 N+1 急切加载

我正在为我的博客评论回复使用预先加载。如果博客评论 parent_id 为空,我对 N+1 没有任何问题。但是,当我将评论分配给 parent_id 以创建回复嵌套时,它会导致 N+1 问题。

我已尝试调查此问题,它似乎来自 posts.comments.bladeposts.comments-child.blade,但我无法弄清楚原因。任何帮助表示赞赏。

发表评论模型

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

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

PostController

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

ma​​in.blade

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

posts.comments.bladeposts.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

解决方法

您的 N+1 问题来自 <h6>{{ $comment->user->name }}</h6> 的回复

更好地预先加载那些

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

如果回复有更多回复,您仍然会遇到问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。