如何在laravel中使用独特的验证?

Pho*_*nix 5 laravel

我有评论表:

在此输入图像描述

我的注释控制器,它从表单中获取值并验证它并将其存储在数据库中.

public function store(Request $request, $product_id)
    {
        $this->validate($request, array(
            'name' => 'required',
            'email'=> 'required|email|unique:comments,product_id',
            'comment' => 'required',
            'rating' => 'required|integer'
            ));
        $product = Product::find($product_id);
        $comment = new Comment();
        $comment->name = $request->name;
        $comment->email = $request->email;
        $comment->comment = $request->comment;
        $comment->rating = $request->rating;
        $comment->product()->associate($product);

        $comment->save();
        Session::flash('success','Comment was added');
        return redirect()->route('product.show',[$product->id]);
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试验证,只允许唯一的电子邮件ID对每个product_id发表评论,如果用户已经对product_id 1进行了评论,则不允许同一用户再次对该ID发表评论.

我试过了

'email'=> 'required|email|unique:comments,product_id'
Run Code Online (Sandbox Code Playgroud)

但是,正如您可以看到相同的电子邮件ID数据输入相同的product_id.

用户可以对n个product_id页面发表评论,但一旦评论了该ID,就无法再次发表评论.

有没有办法验证是否已在特定product_id的数据库中输入电子邮件数据,则不允许相同的电子邮件提交表单.

在此输入图像描述

如果不同的product_id,则可以输入电子邮件.

谢谢.

Ale*_*nin 0

规则不是这样unique运作的。对于您的任务,您需要创建自定义验证规则并手动检查使用此电子邮件的用户是否已经评论过此产品。

https://laravel.com/docs/5.3/validation#custom-validation-rules