laravel雄辩+ mongodb递归获取嵌套评论

时间:2019-05-14 17:33:57

标签: php laravel mongodb

我正在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 viewshere)或重新排列了所有注释(here),实际上是在创建API。

评论class与其他classes无关,对于class中的所有评论,它必须是通用的system

1 个答案:

答案 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();