如何解决Laravel 8.x Blade 中的 N+1 急切加载
我正在为我的博客评论和回复使用预先加载。如果博客评论 parent_id
为空,我对 N+1 没有任何问题。但是,当我将评论分配给 parent_id
以创建回复嵌套时,它会导致 N+1 问题。
我已尝试调查此问题,它似乎来自 posts.comments.blade
和 posts.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();
main.blade
@include('posts.comments',['comments' => $postComments])
posts.comments.blade 和 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
解决方法
您的 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 举报,一经查实,本站将立刻删除。