Как получить доступ к переменной, сохраненной в методе store? - PullRequest
0 голосов
/ 19 декабря 2018

Я использую вложенный набор комментариев (пакет Kalnoy) в своем проекте, и я застрял в создании дочерних комментариев.Я создал два разных метода для обоих типов комментариев.

Сохранение корневых комментариев работает нормально:

public function storeComments(Request $request, Post $post)
    {
        $comment = Comment::create(
            [
            'body' => request('body'),
            'user_id' => auth()->id(),
            'post_id' => $post->id,
            ]
        )->saveAsRoot();

        return back();
    }

Однако дочерние комментарии по-прежнему сохраняются как корневые комментарии.

public function storeNestedComments(Request $request, Comment $comment, Post $post)
    {
        $comment->children()->create(
            [
            'body' => request('body'),
            'user_id' => auth()->id(),
            'parent_id' => $comment->id,
            'post_id' => $post->id,
            ]
        );

        return back();
    }

Эта переменная $ comment во втором методе, естественно, равна нулю.Как я могу получить доступ к комментарию, который был сохранен как root?

Обновление: логика saveAsRoot ()

public function saveAsRoot()
    {
        if ($this->exists && $this->isRoot()) {
            return $this->save();
        }

        return $this->makeRoot()->save();
    }

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Это должно сработать:

public function storeNestedComments($parent_comment_id)
{                   
    $parent = Comment::findOrFail($parent_comment_id);

    Comment::create([
                     'body' => request('body'),
                     'user_id' => auth()->id(),
                     'parent_id' => $parent->id,
                     'post_id' => $parent->post_id
                    ], $parent);

    return back();
}

Я исправил способ извлечения родительского комментария, он делает то же самое, но лучше написано, плюс он выдаст ModelNotFoundException, если комментарий не можетбыть найденным:)

0 голосов
/ 19 декабря 2018

@ Amaury подсказал мне:)

Я изменил свой маршрут, включив в него идентификатор корневого комментария

Route::post('/posts/{post}/{comment}/nestedcomments', 'CommentsController@storeNestedComments');

Передал этот идентификатор в метод и связал дочерний идентификатор сродитель.

public function storeNestedComments($parent_comment_id)
{
    $comment = Comment::where('id', $parent_comment_id)->first();

    $nestedComment = Comment::create(
        [
        'body' => request('body'),
        'user_id' => auth()->id(),
        'parent_id' => $parent_comment_id,
        'post_id' => $comment->post_id,
        ]
    );

    $nestedComment->parent()->associate($comment)->save();

    return back();
}
...