如何访问存储在store方法中的变量?

时间:2018-12-19 13:51:31

标签: php laravel nested-sets

我在项目中使用嵌套的设置注释(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 :(得分: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 :(得分:0)

@Amaury给了我一个提示:)

我更改了路线,以包含根评论ID

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

将该ID传递给该方法,并将子ID与父ID相关联。

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