如何访问存储方法中保存的变量?
How to access a variable saved in the store method?
我在我的项目中使用嵌套集评论(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变量自然为null。如何访问已保存为 root 的评论?
更新:saveAsRoot() 逻辑
public function saveAsRoot()
{
if ($this->exists && $this->isRoot()) {
return $this->save();
}
return $this->makeRoot()->save();
}
@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();
}
这应该可以解决问题:
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
:)
我在我的项目中使用嵌套集评论(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变量自然为null。如何访问已保存为 root 的评论?
更新:saveAsRoot() 逻辑
public function saveAsRoot()
{
if ($this->exists && $this->isRoot()) {
return $this->save();
}
return $this->makeRoot()->save();
}
@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();
}
这应该可以解决问题:
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
:)