You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:41:29