Как получить доступ к переменной, сохраненной в методе store?

Я использую вложенный набор комментариев (пакет 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();
}

1

Решение

Это должно сделать трюк:

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если комментарий не может быть получен 🙂

1

Другие решения

@ Амори дал мне подсказку 🙂

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

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();
}
0

По вопросам рекламы [email protected]