【发布时间】:2022-01-09 00:48:24
【问题描述】:
我有一个 $array 大约。 100k+ 个条目。
我使用以下代码将数组转换为集合:
$insert_data = collect($array);
// Make a collection to use the chunk method
$chunks = $insert_data->chunk(10000);
这将创建 10 组 10000 条记录。
现在我想验证字段,所以我使用以下代码:
$rules2 = [
'email.*' => 'required|email|max:255|unique:users,email',
'phone.*' => 'required|min:10|unique:users,phone',
'password.*' => 'required',
];
$rmsgs = [
'email.unique' => 'The email has already been taken.',
'phone.unique' => 'The phone has already been taken.',
];
$validator = Validator::make($array, $rules2, $rmsgs);
if ($validator->fails()) {
$m = [];
$m['message'] = '';
$xx = $validator->errors();
foreach ($xx->all() as $message) {
$m['message'] .= $message;
$m['message'] .= ',';
}
$m['message'] = rtrim($m['message'], ",");
array_push($msg, $m);
continue;
}
DB::table('users')->insert($chunk->toArray());
现在这个验证在导入文件时不起作用,但它不会在 $msg 数组中抛出任何错误。
我做错了什么?我将某些记录的电子邮件地址留空到 CSV 中,但它没有返回任何错误。
【问题讨论】:
-
我可以建议,在这样一个长问题上,您可以在顶部制作一个简短的版本,以便快速查看它是否可以帮助您。并且也许还修复了缩进和语法,所以它更快更容易阅读。
-
感谢您的快速建议!我添加了我正在做的每一个细节以及我面临的错误。为了更好地突出显示,我确实将问题以粗体显示以引起您的注意。寻找更好的解决方案。
-
你能给我一个图像中的 dd($array) 输出吗?
-
我理解被理解的愿望,但是这个问题的前半部分不需要。您有一个要验证的集合,我们只需要知道集合是什么样的以及验证规则是什么样的。与您创建集合的方式无关。
-
您在循环上下文之外使用
continue语句,它不会做任何事情。你的意思是使用return?
标签: php laravel laravel-validation