验证整数数组
Validate an array of integers
给定一个整数数组:
[1, 2, 3, 4, ...]
如何使用验证器来检查 table 中是否存在每一个?没有 foreach
循环可能吗?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);
你可以让你的:
public function validateArrayInt($attribute, $value, $parameters){
return array_filter(value, 'is_int')
}
然后:
$validator = Validator::make($request->all(), [
'array' => ['required', 'array_int', 'exists:users,id']
]);
您所写的验证应该有效。如果 exists 验证与数组一起使用,它将自动使用 where in
作为 exists 查询。
因此,根据您所写的验证,验证将获取 users
记录的计数,其中 id
字段位于您的 [=14= 提供的 ID 列表中] 输入。
因此,如果您的 array
是 [1, 2, 3, 4]
,它将获得 users.id in (1,2,3,4)
处的计数,并将其与您的 array
数组中的元素计数进行比较(这是 4)。如果查询计数 >= 数组计数,则验证通过。
这里有两点需要注意:如果您检查的列不是唯一的,或者您的数组数据是否有重复元素。
如果您正在检查的列不是唯一的,则您的查询计数可能 >= 数组计数,但并非数组中的所有 ID 都实际存在。如果您的数组是 [1, 2, 3, 4]
,但您的 table 有四个 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());
请记住,每个元素都将单独验证,因此它将 运行 对 ids
数组中的每个元素进行新查询。
试试这个来检查你的响应数组是否是 json.
return response()->json($yourArr)->setEncodingOptions(JSON_NUMERIC_CHECK);
给定一个整数数组:
[1, 2, 3, 4, ...]
如何使用验证器来检查 table 中是否存在每一个?没有 foreach
循环可能吗?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);
你可以让你的
public function validateArrayInt($attribute, $value, $parameters){
return array_filter(value, 'is_int')
}
然后:
$validator = Validator::make($request->all(), [
'array' => ['required', 'array_int', 'exists:users,id']
]);
您所写的验证应该有效。如果 exists 验证与数组一起使用,它将自动使用 where in
作为 exists 查询。
因此,根据您所写的验证,验证将获取 users
记录的计数,其中 id
字段位于您的 [=14= 提供的 ID 列表中] 输入。
因此,如果您的 array
是 [1, 2, 3, 4]
,它将获得 users.id in (1,2,3,4)
处的计数,并将其与您的 array
数组中的元素计数进行比较(这是 4)。如果查询计数 >= 数组计数,则验证通过。
这里有两点需要注意:如果您检查的列不是唯一的,或者您的数组数据是否有重复元素。
如果您正在检查的列不是唯一的,则您的查询计数可能 >= 数组计数,但并非数组中的所有 ID 都实际存在。如果您的数组是 [1, 2, 3, 4]
,但您的 table 有四个 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());
请记住,每个元素都将单独验证,因此它将 运行 对 ids
数组中的每个元素进行新查询。
试试这个来检查你的响应数组是否是 json.
return response()->json($yourArr)->setEncodingOptions(JSON_NUMERIC_CHECK);