我正在resource
中用Laravel
作为MongoDB
创建评论database
。我遵循Laravel website
中的一个use case进行建模。
现在,我想发表评论及其回复。我想到了用此code
来做到这一点:
public function nested_comments($comment_id){
$comment = Comment::where('_id', $comment_id)->first();
$nested_comments = Comment::where('discussion_id', $comment_id)->get();
$comment->replies = $nested_comments;
foreach ($nested_comments as $nested)
{
$this->nested_comments($nested->_id);
}
return $comment;
}
但是我只得到评论本身以及相关评论的第一层。我在StackOverflow
上找到了一些带有答案的问题,但它们使用的是Laravel views
(here)或重新排列了所有注释(here),实际上是在创建API。
评论class
与其他classes
无关,对于class
中的所有评论,它必须是通用的system
。
答案 0 :(得分:1)
为什么不使其成为自我参照关系
首先添加parent_id
Schema::table('comments', function (Blueprint $table) {
$table->unsignedBigInteger('parent_id')->nullable();
});
然后在您的评论模型中
public function parent()
{
return $this->belongsTo('App\Comment', 'parent_id');
}
public function replies()
{
return $this->hasMany('App\Comment', 'parent_id', 'id');
}
所以您可以做这样的事情
$comments = Comment::with('replies')->get();