限制发表评论Laravel

时间:2018-09-20 07:42:25

标签: php laravel controller

这是问题所在,我有带有帖子和评论的应用程序。但是我想限制每个用户的评论,所以如果有1个帖子,则每个用户只有1条评论。有可能吗?

这是我在store中的CommentController函数:

public function store(Request $request, $post)
{
    $this->validate($request, array(
        'title' => 'required|max:200',
        'desc' => 'required|max:800'
    ));
    $comments = new Comment();
    $comments->id_user = Auth::id();
    $comments->id_post = $post;
    $comments->title = $request->A;
    $comments->desc = $request->B;
    $comments->save();
    return redirect()->route('controller.index');
}

我可以在此store函数中添加什么查询,以限制用户仅在1条帖子中发表评论。谢谢大家希望能对我有所帮助。

2 个答案:

答案 0 :(得分:2)

非常简单,您需要检查用户的评论和帖子是否已经存在,像这样:

if (! Comment::where('id_user', $userId)->where('id_post', $postId)->exists()) {
   //save the comment
} else {
   // do not save the comment
}

在您的情况下,$userId可能是Auth::user()->id,而$ postId是$post->id

答案 1 :(得分:1)

您应该尝试这个

检查此用户为此帖子添加的评论

$result = DB::table('comments')->where('id_user', '=', Auth::id())->where('id_post', '=', $incase->id)->get();

if(count($result) < 1){
    $comments = new Comment();
    $comments->id_user = Auth::id();
    $incase = Incase::find($id);
    $comments->id_post = $incase->id;
    $comments->title = $request->A;
    $comments->desc = $request->B;
    $comments->save();
    return redirect()->route('controller.index');
}
else{
    return redirect()->route('controller.index')->with('warning','Already Commented');
}

OR

如果存储了一条评论,则为该用户隐藏评论框