我收到如下字符串形式的发布数据:
data01,data02
data11,
data21,data22
...
dataxx,dataxx
数据最长可达 10,000 行,第 1 列是必填且唯一的,第 2 列是可选的。
因此清理字符串(确保第 1 列唯一(仅在输入数据内 - 不通过数据库)、格式等)并将其转换为数组:
[0:
[col1: data01,
col2: data02],
1:
[col1: data11,
col2: ""],
2:
[col1: val11,
col2: val12],
.....
9999:
[col1: dataxx,
col2: dataxx],
]
所以该数组现在位于我的 Controller 中...
现在,我个人认为,最好通过 Stored Proc 将该数组发送到 mysql,然后让 SP 执行批量插入工作(让我知道您是否有更好的方法,以及为什么)
问题:
- 如何将该数组传递给 Mysql?
- 我应该在重复键忽略上使用插入选择吗?
- 我需要在 View 中显示一个报告,告诉用户哪个数据列 1 是重复的(忽略)
还有一个附带问题, 如果我这样做:
$validator = Validator::make($request->all(), [
'array.*.column1' => 'unique:items'
]);
它实际上会查询到与我的数据量一样多的数据库吗? (例如,10000 次?) 我只是担心代码性能太贵了
最佳答案
我的解决方案是什么
- 首先定义验证规则,它总是根据请求而不是在数据库上运行。
--
$rules = array("column 1" => "unique:KEY_NAME|required");
$validator = Validator::make($request->all(), $rules);
- 制作一个数组
--
$data = array(
array('k1'=> 'v1', 'k2'=> 'v2'), all data
);
- 现在使用
Eloquent::insert();
并将数据传递给它。
好吧,不要查询数据库。只需对最终数据和请求数据进行数组差异。还要再添加一列,说明是否重复。所以它会节省一段美好的时光。
关于php - 在 Laravel 5 中批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989792/