gpt4 book ai didi

php - laravel Eloquent 嵌套评论和回复

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:44 25 4
gpt4 key购买 nike

几天前,我看到一个网站,用户可以在该网站上对帖子发表评论。其他用户可以对此进行回复。并且重播可以像下面的示例屏幕截图一样回复.. 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');
}

在 Controller 中

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

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

最佳答案

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

然后在 Comment 模型中,添加一个 self 关系来获取所有 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

关于php - laravel Eloquent 嵌套评论和回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com