Laravel如何验证一行中的数据,而不是检查整个表

时间:2017-07-11 19:28:54

标签: php mysql laravel validation laravel-validation

我不确定我是否简要解释了问题是什么。 我有一个用户投票表格,用户通过他的名字,姓氏,母亲'姓氏和身份证。

我还有一个表users,它存储了所有这些数据。昨天我发现了一个错误,或者我误解了laravel验证是如何工作的,因为它每次发现表中存在的所有数据时都会通过提交。

这是一张包含两条记录的表格。

示例

我对验证的期望是检查ID = 98111091239 name = Andrzej surname = Pianowski和mother surname = Mila,并且只有在一切正确且存在于一行中之后才能进行投票。

相反,我可以从第一行传递ID,其他东西从第二行传递,它也将允许用户投票。 这是一个错误,laravel工作方式或什么? 我真的很期待任何提示,帮助,消化。

enter image description here

此处的验证规则是

  /*This validates whether all data is correct  */
   $validator = Validator::make($request->all(),[
   //check whether such pesel exists in votes and in voters
       'pesel' =>'required|exists:wyborca|max:11|min:11',
       'imie' =>'required|exists:wyborca|max:64|min:2',
       'nazwisko' => 'required|exists:wyborca|max:128|min:2',
       'nazwisko_matki' => 'required|exists:wyborca|max:128|min:2'
       ]);
  if($validator->fails())
  {
    return back()
      ->with('errors','Wprowadzono nieprawidłowe dane')
      ->withInput();
  }

1 个答案:

答案 0 :(得分:1)

验证器似乎正在传递,因为这些值可能存在于多个记录中而不仅仅是单个记录中。

一种解决方案是验证以确保请求中存在所有字段,然后执行简单的Eloquent查询以检查记录是否存在:

$user = App\User::where('id', $request->id)
    ->where('name', $request->name)
    ->where('surname', $request->surname)
    ->where('mother', $request->mother)
    ->exists(); //true or false

if($user){
//vote
}

return response()->json(['error' => 'user not found'], 404);

如果确实存在,则投票否则返回错误。