php - 在 Laravel 5 中批量插入

标签 php mysql orm eloquent laravel-5.6

我收到如下字符串形式的发布数据:

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 执行批量插入工作(让我知道您是否有更好的方法,以及为什么)

问题:

  1. 如何将该数组传递给 Mysql?
  2. 我应该在重复键忽略上使用插入选择吗?
  3. 我需要在 View 中显示一个报告,告诉用户哪个数据列 1 是重复的(忽略)

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

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

它实际上会查询到与我的数据量一样多的数据库吗? (例如,10000 次?) 我只是担心代码性能太贵了

最佳答案

我的解决方案是什么

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

--

$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(); 并将数据传递给它。

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

关于php - 在 Laravel 5 中批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989792/

相关文章:

php - 如何创建多个游戏服务器?

php - 您如何运行一个长的 PHP 脚本并通过 HTTP 不断向浏览器发送更新?

php - 将购物车 session 保存到数据库

mysql - 更新时增加版本列

java - JPA 映射问题 - 请求建模方向

php - 如何在运行时(动态地)创建 PHP 静态类属性?

php - 您将如何使用元值来模仿此 Google map 查询?

php - PHP 或 SQL 中耗时格式

database - 哪个 ORM 框架最能处理 MVCC 数据库设计?

Python peewee - 从多个表中选择