laravel eloquent 嵌套评论和回复

2023-03-03php开发问题
2

本文介绍了laravel eloquent 嵌套评论和回复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

几天前,我看到一个网站,用户可以在其中评论帖子.其他用户可以回复.并且重播可以有像下面的示例截图一样的回复..

Few days ago, I saw a website where users can comment on a post. Other users can reply on that. and a replay can have replies like the example screenshot below..

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

So I thought to give it a try but somehow couldnt figure it out. here is my database set up

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);

这完美地返回了评论和回复.但是如果有reply的回复,就不会显示了.我怎样才能做到这一点?需要建议.

this perfectly returns the comment and replies. But if there is a reply of reply, it doesnt show up. How can I do that? Need suggestion.

推荐答案

reply_idnullable() parent_id 交换.所以基本上你想知道评论是否有父级.

Swap reply_id with a nullable() parent_id. So basically you want to know if a comment has a parent.

然后在Comment模型中,添加一个self关系来获取所有parent_id匹配的评论.

Then in Comment model, add a self relationship to take all comments whose parent_id match.

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

在您的视图中,您可以为每个评论及其回复嵌套循环

In your view you can have nested loops for each comments and its replies

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

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

这篇关于laravel eloquent 嵌套评论和回复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17