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

Laravel中如何在show.blade.php同时展示广告及其评论?

如何在广告详情页同时展示评论?

首先咱们得先理清楚模型之间的关联——广告和评论应该是一对多的关系(一个广告可以有多个评论),所以第一步要先在模型里定义好关联:

  1. 定义Ad模型与Comment模型的关联
    打开你的app/Models/Ad.php,添加一个comments方法来关联评论模型:

    public function comments()
    {
        // 这里假设你的评论模型是Comment,表名是comments,且comments表有ad_id字段关联ads表的id
        return $this->hasMany(Comment::class);
    }
    
  2. 在控制器中预加载评论数据
    你的show方法现在只查了广告本身,要把评论一起查出来(用with预加载可以避免N+1查询问题,性能更好),同时建议把变量名从$user改成$ad,更符合语义(毕竟是广告数据,不是用户):

    public function show($id) {
        // 用findOrFail替代find,找不到广告时会自动返回404页面,更合理
        $ad = Ad::with('comments')->findOrFail($id);
        return view('show', ['ad' => $ad]);
    }
    
  3. 在视图中渲染评论
    修改你的show.blade.php,在广告信息之后添加评论展示的代码,遍历预加载好的评论数据即可:

    <strong> Object:</strong> {{$ad->object}}<br>
    <strong> Description : </strong> {{$ad->description}}<br>
    
    <!-- 评论区域 -->
    <h3>用户评论</h3>
    @if($ad->comments->isEmpty())
        <p>目前还没有评论,快来抢沙发吧!</p>
    @else
        @foreach($ad->comments as $comment)
            <div style="margin: 15px 0; padding: 10px; border: 1px solid #eee; border-radius: 4px;">
                <p><strong>评论人:</strong> {{$comment->author_name}}</p> <!-- 这里替换成你评论表中实际的评论者字段,比如user_id关联的用户名或者直接存的名称 -->
                <p>{{$comment->content}}</p> <!-- 替换成你评论表中的内容字段 -->
                <small style="color: #666;">发布于: {{$comment->created_at->format('Y-m-d H:i')}}</small>
            </div>
        @endforeach
    @endif
    

注意:上面的评论字段(比如author_name、content)要根据你实际的comments表结构来调整,确保字段名匹配。如果你的评论表是关联用户表的,还可以通过$comment->user->name来获取评论者的用户名(前提是Comment模型里定义了user关联)。

内容的提问来源于stack exchange,提问作者souma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:29:51