集合验证不起作用 + laravel
Posted
技术标签:
【中文标题】集合验证不起作用 + laravel【英文标题】:Collection validation does not work + laravel 【发布时间】: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
?
【参考方案1】:
你必须这样做
$rules2 = [
'*.email' => 'required|email|max:255|unique:users,email',
'*.phone' => 'required|min:10|unique:users,phone',
'*.password' => 'required'
];
你必须在 cron 任务中完成
【讨论】:
这行得通!但是执行通过插入 1 束记录来停止,例如插入 5k 记录并给出错误,但其余 95k 仍然未执行。 你必须在 cron 任务中完成 更喜欢 laravel-excel Chunk 完成了这项工作.. 我已将文件分成 1000 个数组块并将其放入队列中,这意味着多个作业,如 100 个作业,并且它将在完成后继续在后台的作业中运行我正在通过启动方法中的 appserviceprovider 向管理员用户发送电子邮件。以上是关于集合验证不起作用 + laravel的主要内容,如果未能解决你的问题,请参考以下文章