рекурсивное получение вложенных комментариев с помощью laravel eloquent + mongodb - PullRequest
0 голосов
/ 14 мая 2019

Я создаю комментарий resource в Laravel с MongoDB как database.Я использовал один вариант использования из Laravel website для моделирования всего.

Теперь я хочу получить комментарий и его ответы.Я думал сделать это с этим 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 ( здесь ) или переупорядочивают все комментарии ( здесь ), и я фактически создаю API.

Комментарий class не связан с другими classes, это должен быть общий class для всех комментариев в system.

1 Ответ

1 голос
/ 14 мая 2019

почему бы не сделать это ссылками на себя

сначала добавить 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...