【问题标题】:laravel eloquent nested comment and replieslaravel 雄辩的嵌套评论和回复
【发布时间】:2017-02-01 03:51:10
【问题描述】:

几天前,我看到一个用户可以对帖子发表评论的网站。其他用户可以对此进行回复。并且重播可以像下面的示例屏幕截图一样回复..

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

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

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

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    reply_id 替换为nullable() parent_id。所以基本上你想知道评论是否有父级。

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

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

    在您看来,您可以为每个 cmets 及其回复设置嵌套循环

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

    【讨论】:

    • 能否提供一个完整的例子
    • 虽然有几个问题:动作属性是什么样的以及为什么这个 /posts/{{$post->id}}/cmets/{{parent_id}} 不可行,即显示错误那个 parent_id 不能被调用两次?以及如何首先获得父 cmets id?
    【解决方案2】:

    在您的控制器中,->where('reply_id','=',0) 子句肯定不会返回任何回复。删除条件,eloquent 将假定返回与评论相关的所有回复。

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2015-06-22
      • 1970-01-01
      • 2013-07-10
      • 2021-05-22
      • 2015-09-01
      • 2014-06-02
      • 1970-01-01
      • 2020-05-10
      相关资源
      最近更新 更多