问题描述
在 Laravel 8.x 中,我试图创建一个博客评论系统,允许您回复评论。如果回复评论,评论会被分配一个 parent_id
,这是他们正在回复的评论的 id
。目前,当我用回复循环评论时,它只会输出一个深度为 1 个循环的回复,如下例所示:
问题的当前示例:
用户 1:随机发布 1..> 用户 2:此文本是用户 1 对帖子 1 的回复
用户 6:随机发布 2..
User7:随机发帖 3..
我正在努力实现的目标:
用户 1:随机发布 1..> 用户 2:此文本是用户 1 对帖子 1 的回复
>> 用户 3:此文本是对用户 2 对帖子 1 的回复
>>> 用户 4:此文本是对用户 3 的帖子 1 的回复
>>> 用户 5:此文本是对用户 3 对帖子 1 的回复
用户 6:随机发布 2..
User7:随机发帖 3..
我当前的代码
模型:class PostComment extends Model
{
use HasFactory;
public function replies()
{
return $this->hasMany($this,'parent_id');
}
}
刀片:
@foreach ($comments as $comment)
<p> {{ $comment->user->name }} : {{ $comment->comment }} </p>
@foreach ($comment->replies as $reply)
<p> {{ $reply->user->name }} : {{ $reply->comment }} </p>
@endforeach
@endforeach
现在,如果我在评论循环中添加 @foreach ($comment->replies as $reply)
4 次,它将显示回复.. 但这当然不切实际,因为可以对评论进行无限回复。我希望你能理解我的意思,我非常不擅长解释。
非常感谢任何帮助:)
解决方法
创建两个刀片文件
comment-list.blade.php
child-comment-list.blade.php
在comment-list.blade.php文件
@if(count((array)$comments))
@foreach ($comments as $comment)
<p> {{ $comment->user->name }} : {{ $comment->comment }} </p>
@include('child-comment-list',['comments'=>$comment->replies])
@endforeach
@endif
在child-comment-list.blade.php 文件中
@if(count((array)$comments))
@foreach($comments as $comment)
<p> {{ $comment->user->name }} : {{ $comment->comment }} </p>
@if(count((array)$comment->replies))
@include('child-comment-list',['comments'=>$comment->replies])
@endif
@endforeach
所以在您当前的文件中
@include('comment-list',['comments'=>$comments]);