大量插入Laravel 5

时间:2018-08-23 15:53:39

标签: php mysql orm eloquent laravel-5.6

我以字符串形式接收帖子数据,如下所示:

data01,data02
data11,
data21,data22
...
dataxx,dataxx

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

因此要清理字符串(确保第1列是唯一的(仅在输入数据内-不能通过DB),格式等),并将其转换为数组:

[0:
    [col1: data01,
     col2: data02],
 1:
    [col1: data11,
     col2: ""],
 2:
    [col1: val11,
     col2: val12],
 .....
 9999:
    [col1: dataxx,
     col2: dataxx],
]

因此该阵列现在位于我的控制器上...

现在,我个人认为,最好是通过Stored Proc将该数组发送到mysql,并让SP进行批量插入工作(让我知道您是否有更好的方法,以及为什么)

问题:

  1. 如何将该数组传递给Mysql?
  2. 我应该对重复键忽略使用插入选择吗?
  3. 我需要查看报告以告诉用户哪个数据列1已重复(忽略)

还有一个附带的问题, 如果我这样做:

$validator = Validator::make($request->all(), [
    'array.*.column1' => 'unique:items'
]);

它实际查询数据库的数据量是多少? (例如10000次?) 我只是觉得代码性能太昂贵了

1 个答案:

答案 0 :(得分:0)

我对此的解决方案是

  1. 首先定义验证规则,该规则始终根据请求而不是DB运行。

-

$rules = array("column 1"  => "unique:KEY_NAME|required");
$validator = Validator::make($request->all(), $rules);
  1. 创建数组

-

$data = array(
array('k1'=> 'v1', 'k2'=> 'v2'), all data

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

不要在数据库上查询。只需对最终数据和请求数据进行数组处理即可。还要添加一列,指出是否重复。这样可以节省很多时间。