Laravel如何验证一行中的数据,而不是检查整个表
Posted
技术标签:
【中文标题】Laravel如何验证一行中的数据,而不是检查整个表【英文标题】:Laravel how to validate data in one row, not checking in whole table 【发布时间】:2017-12-16 00:24:31 【问题描述】:我不确定我是否简要解释了问题所在。 我有一个用户投票表格,其中用户通过他的名字、姓氏、母亲的姓氏和 ID。
我还有一个表users
存储所有这些数据。昨天我发现了一个错误或者我误解了 laravel 验证的工作原理,因为它每次找到表中存在的所有数据时都会通过提交。
这是一个有两条记录的表。
示例
我对验证的期望是检查 ID=98111091239 name=Andrzej surname=Pianowski 和 Mother surname =Mila,并且只有当一切正确并且存在于一行中时,才能进行投票。
相反,我可以从第一行传递 ID,从第二行传递其他内容,它还允许用户投票。 这是一个错误,laravel 以这种方式工作还是什么? 我真的很期待任何提示、帮助和建议。
这是我正在使用的验证规则
/*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();
【问题讨论】:
Laravel validation: exists with additional column condition - custom validation rule的可能重复 不,这是不同的主题 【参考方案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);
如果确实存在,则进行投票,否则返回错误。
【讨论】:
以上是关于Laravel如何验证一行中的数据,而不是检查整个表的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?
如何检查用户是不是通过 Laravel 上的 cookie 会话进行身份验证?
如何使用 laravel 8 验证来自另一个(买家)表的数据(请求中)
如何从 Laravel 5.1 中的表而不是“用户”表中对用户进行身份验证?