验证整数数组

2024-03-25

给定一个整数数组:

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

如何使用验证器来检查表中是否存在这些内容?可能没有foreach loop?

$validator = Validator::make($request->all(), [
    'array' => 'required|exists:users,id'
]);

您所写的验证应该有效。如果存在验证与数组一起使用,它将自动使用where in对于存在的查询。

因此,根据您所写的验证,验证将获得users记录其中id字段位于您提供的 ID 列表中array input.

因此,如果您的array is [1, 2, 3, 4],它将得到计数,其中users.id in (1,2,3,4),并将其与您的元素计数进行比较array数组(即 4)。如果查询计数 >= 数组计数,则验证通过。

这里需要注意两件事:如果您要检查的列不是唯一的,或者您的数组数据是否包含重复元素。

如果您要检查的列不是唯一的,则您的查询计数可能 >= 数组计数,但并非数组中的所有 id 都实际存在。如果你的数组是[1, 2, 3, 4],但是您的表有 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 array.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证整数数组 的相关文章

随机推荐