use*_*955 5 laravel laravel-5 laravel-5.3
给定一个整数数组:
[1, 2, 3, 4, ...]
Run Code Online (Sandbox Code Playgroud)
如何使用验证器检查表中是否存在这些验证器?可能没有foreach循环?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);
Run Code Online (Sandbox Code Playgroud)
pat*_*cus 17
您的书面验证应该有效.如果存在验证与数组一起使用,它将自动where in用于存在查询.
因此,根据您编写的验证,验证将获得users记录的位数,该id字段位于array输入提供的ID列表中.
因此,如果array是[1, 2, 3, 4],它将获得计数users.id in (1,2,3,4),并将其与array数组中元素的计数(即4)进行比较.如果查询计数> =数组计数,则验证通过.
这里要注意两件事:如果您检查的列不是唯一的,或者您的数组数据有重复的元素.
如果您检查的列不是唯一的,则查询计数可能是> =数组计数,但并非所有数组中的ID实际存在.如果您的数组是[1, 2, 3, 4],但您的表有四个id为1的记录,即使具有ID 2,3和4的记录不存在,验证也会通过.
对于重复的数组值,如果您的数组是[1, 1],但您只有一个id为1的记录,则验证将失败,因为查询计数将为1,但您的数组计数为2.
要解决这两个问题,您可以进行单独的数组元素验证.您的规则看起来像:
$request = [
'ids' => [1, 2, 3, 4],
];
$rules = [
'ids' => 'required|array',
'ids.*' => 'exists:users,id', // check each item in the array
];
$validator = Validator::make($request, $rules);
dd($validator->passes(), $validator->messages()->toArray());
Run Code Online (Sandbox Code Playgroud)
请记住,每个元素都将单独验证,因此它将为ids数组中的每个元素运行一个新查询.
| 归档时间: |
|
| 查看次数: |
5678 次 |
| 最近记录: |