ascentech/massive-csv-import

这个轻量级包帮助开发者使用 Laravel 队列高效地导入包含数百万记录的 csv 文件。

v1.1.3 2023-07-19 15:25 UTC

This package is auto-updated.

Last update: 2024-09-19 18:12:01 UTC


README

  • 这个轻量级包帮助开发者使用 Laravel 队列高效地导入包含数百万记录的 csv 文件。

先决条件

  • 您必须使用 Laravel 队列,并且数据库中必须存在 jobs 表。如果您不使用队列,可以使用此 链接 进行设置。
  • 对 Laravel 项目的 storage 目录具有写入权限。您也可以通过此包的配置文件更改此位置。
  • 默认情况下,此包尝试从 App\Models\ 命名空间搜索所需的 Model 类。如果您将 Models 放在另一个目录中,请将路径设置在配置文件中,例如 vendor\ascentech\massive-csv-import\config\massive-csv-import.php

安装

  • composer require ascentech/massive-csv-import
  • Ascentech\MassiveCsvImport\MassiveCsvImportServiceProvider::class, 添加到您项目 config\app.php 文件的 providers 数组中。

使用

  • 准备一个大型 csv 文件(不带标题)进行导入。
  • 在您的项目中准备一个文件上传界面,并在您的控制器代码中写入以下两行
  • use Ascentech\MassiveCsvImport\MassiveCsvImportFacade;
  • $result = MassiveCsvImportFacade::import($path, $table_name, $columns);
  • $path 指的是上传 csv 文件的临时路径
  • $table_name 是您想导入大型 csv 文件的数据库表名称。
  • $columns 是特定表的列数组,例如 $columns = ['name','description','status'];
  • 此包将从大文件创建多个较小的 csv 文件,并将这些文件保存到 storage\table_name\ 目录中。默认的块大小为 1000,您可以在配置文件中编辑 csv_chunk_size 变量的值,例如 vendor\ascentech\massive-csv-import\config\massive-csv-import.php
  • 为每个较小的 csv 文件创建一个单独的作业以在后台处理。
  • 您需要运行 php artisan queue:work 命令以处理作业。
  • 所有已处理的文件都将放置在相同的 storage\table_name\ 目录中,并带有 .csv-processed 扩展名。
  • 记住!如果某个特定记录(来自较小的 csv 文件)无法插入数据库,错误消息将写入 laravel.log 文件,但剩余的作业将继续处理而不会失败。将自动创建一个单独的目录 storage\table_name\failed,其中将包含只有失败记录的 csv 文件。您可以修复这些并稍后在单独的 csv 文件中导入。

许可证

  • MIT