Laravel关联实现:按文章展示对应评论及评论用户
解决Laravel文章关联评论显示问题
问题根源
你当前的代码会把所有评论显示在每篇文章下方,是因为Blade模板中循环的是全局$comments集合,而非当前文章的关联评论集合,同时查询逻辑未利用Laravel关联预加载,存在性能隐患。
步骤1:优化控制器查询逻辑
修改HomeController.php的index方法,通过预加载一次性获取文章、文章作者、关联评论及评论作者,避免N+1查询问题:
public function index() { // 预加载文章的作者、关联评论及评论的作者 $posts = Post::with(['user', 'comments.user'])->get(); return view('home', [ 'posts' => $posts ]); }
无需再单独传递$comments变量,每个文章对象已包含属于自己的评论集合。
步骤2:修正Blade模板显示逻辑
修改home.blade.php,循环当前文章的关联评论集合,替代全局评论循环:
@foreach ($posts as $post) <div class="box-post"> <p>{{ $post->user->name }}</p> <p>{{ $post->post_content}}</p> <a href="/comment/{{ $post->id }}"><button>Comment</button></a> </div> {{-- 循环当前文章的专属评论 --}} @foreach ($post->comments as $comment) <div class="box-post"> <p>{{ $comment->user->name }}:{{ $comment->comment_content }}</p> </div> @endforeach @endforeach
额外注意事项
检查评论模型文件名:Laravel模型规范使用单数命名,你的Comments.php应改为Comment.php,类名保持Comment,否则关联关系可能无法正确识别(如果是笔误的话)。
内容的提问来源于stack exchange,提问作者trying to solve this problem
相关产品推荐
相关产品推荐

