首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批量插入Laravel 5

批量插入Laravel 5
EN

Stack Overflow用户
提问于 2018-08-23 15:53:39
回答 1查看 777关注 0票数 1

我收到的帖子数据为字符串,如下所示:

代码语言:javascript
复制
data01,data02
data11,
data21,data22
...
dataxx,dataxx

数据可以长达10.000行,第1列是强制且唯一的,第2列是可选的。

因此,对字符串进行清理(确保列1唯一(仅在输入数据中,而不是通过DB)、格式等)。并将其转换为数组:

代码语言:javascript
复制
[0:
    [col1: data01,
     col2: data02],
 1:
    [col1: data11,
     col2: ""],
 2:
    [col1: val11,
     col2: val12],
 .....
 9999:
    [col1: dataxx,
     col2: dataxx],
]

所以这个数组现在放在我的控制器..。

现在,依我看,最好通过存储的Proc将数组发送到mysql,并让SP执行批量插入工作(请告诉我是否有更好的方法,以及为什么)

问题:

  1. 如何将该数组传递给Mysql?
  2. 是否应该使用insert select对重复键忽略?
  3. 我需要在视图中显示一份报告,以告诉用户哪些数据列1被重复(忽略)。

还有一个附带的问题,如果我问了:

代码语言:javascript
复制
$validator = Validator::make($request->all(), [
    'array.*.column1' => 'unique:items'
]);

它会像我的数据量那样多地查询DB吗?(例如,10000次?)我只是反对代码性能太昂贵了

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 16:15:24

我的解决办法是

  1. 首先,定义验证规则,它总是根据请求运行,而不是在DB上运行。

--

代码语言:javascript
复制
$rules = array("column 1"  => "unique:KEY_NAME|required");
$validator = Validator::make($request->all(), $rules);
  1. 做一个数组

--

代码语言:javascript
复制
$data = array(
array('k1'=> 'v1', 'k2'=> 'v2'), all data

);
  1. 现在使用Eloquent::insert();并将数据传递到这里。

不要在数据库上查询。只需对最终数据和请求数据进行数组差异即可。另外,再添加一列,说明是否是重复的。所以这会节省一段美好时光。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51989792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档