ascentech / massive-csv-import
这个轻量级包帮助开发者使用 Laravel 队列高效地导入包含数百万记录的 csv 文件。
v1.1.3
2023-07-19 15:25 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