gpt4 book ai didi

laravel - 验证整数数组

转载 作者:行者123 更新时间:2023-12-04 16:28:39 26 4
gpt4 key购买 nike

给定一个整数数组:

[1, 2, 3, 4, ...]

如何使用验证器来检查表中是否存在每一个?可能没有 foreach环形?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);

最佳答案

您的书面验证应该有效。如果存在验证与数组一起使用,它将自动使用 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());

请记住,每个元素都将单独验证,因此它将为 ids 中的每个元素运行一个新查询。大批。

关于laravel - 验证整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42662579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com