Laravel中如何在show.blade.php同时展示广告及其评论?
如何在广告详情页同时展示评论?
首先咱们得先理清楚模型之间的关联——广告和评论应该是一对多的关系(一个广告可以有多个评论),所以第一步要先在模型里定义好关联:
定义Ad模型与Comment模型的关联
打开你的app/Models/Ad.php,添加一个comments方法来关联评论模型:public function comments() { // 这里假设你的评论模型是Comment,表名是comments,且comments表有ad_id字段关联ads表的id return $this->hasMany(Comment::class); }在控制器中预加载评论数据
你的show方法现在只查了广告本身,要把评论一起查出来(用with预加载可以避免N+1查询问题,性能更好),同时建议把变量名从$user改成$ad,更符合语义(毕竟是广告数据,不是用户):public function show($id) { // 用findOrFail替代find,找不到广告时会自动返回404页面,更合理 $ad = Ad::with('comments')->findOrFail($id); return view('show', ['ad' => $ad]); }在视图中渲染评论
修改你的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
相关产品推荐
相关产品推荐

