微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – laravel eloquent嵌套评论和回复

几天前,我看到一个网站,用户可以在帖子上发表评论.其他用户可以回复此问题.并且重播可以有回复,如下面的示例屏幕截图..

enter image description here

所以我想试一试,但不知何故无法弄明白.
这是我的数据库设置

Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id');
            $table->unsignedInteger('post_id');
            $table->unsignedInteger('reply_id')->default(0);
            $table->text('body');
            $table->timestamps();
        });

模型中的关系

class Comment extends Model
{
    protected $fillable = [
        'user_id',
        'post_id',
        'reply_id',
        'body'
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function post()
    {
        return $this->belongsTo(Post::class);
    }

    public function replies()
    {
        return $this->hasMany(Comment::class,'reply_id','id');
    }

在控制器中

$comments = Comment::with('replies')->where('reply_id','=',0)->get(['id','reply_id','body']);
   return response($comments);

这完美地回复评论回复.但如果有回复回复,它就不会显示出来.我怎样才能做到这一点?需要建议.

解决方法:

使用nullable()parent_id交换reply_id.所以基本上你想知道评论是否有父母.

然后在Comment模型中,添加一个自我关系以获取其parent_id匹配的所有注释.

public function replies() {
    return $this->hasMany('App\Comment', 'parent_id');
}

在您的视图中,您可以为每个注释及其回复创建嵌套循环

@foreach($comments as $comment) 
   {{ $comment->content }}

   @if ( $comment->replies )
       @foreach($comment->replies as $rep1)
           {{ $rep1->content }}
           ...
       @endforeach
   @endif
@endforeach

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐