dmt-software/laravel-import-reader

处理大量导入的导入读取器

v0.2.1 2023-03-01 10:01 UTC

This package is auto-updated.

Last update: 2024-08-29 13:20:21 UTC


README

Laravel 为 dmt-software/import-reader 提供的桥梁,用于遍历(大量)导入的内容。

支持

此包已在 laravel >= 8.0 上进行测试,且需要 laravel >= 8.0。

安装

composer require dmt-software/laravel-import-reader

服务提供者可以自动注册。否则,请手动注册并将其添加到 config/app.php

'providers' => [
    // ...
    DMT\Laravel\Import\Reader\Providers\ImportReaderServiceProvider::class,
];

发布配置文件

php artisan vendor:publish --provider="DMT\Laravel\Import\Reader\Providers\ImportReaderServiceProvider"

配置

配置中包含自定义清理器、处理程序和自定义错误处理程序的条目。有关其用法,请参阅 config/reader.php 文件或 dmt-software/import-reader 文档。

用法

一个名为 items.json 的文件包含以下数据

[
  { 
    "id": 1,
    "name": "item-name",
    // ...
  },
  {
    "id": 2,
    "name": "item2-name",
    // ...
  },
  // ...
]

这些数据可以分块读取,并导入到数据库中

use DMT\Laravel\Import\Reader\Facades\ImportReader;

/** @var iterable<int, array> $items */
$items = ImportReader::buildToArrayReader(
    'directory-to/items.json', [
        'path' => '.'
    ])->read();

foreach ($items as $row => $item) {
    // process the items 
    if (!empty($item['name'])) {
        Item::updateOrCreate($item);
    }
}

或者,可以将读取器构建器注入到您的类或方法中。

use DMT\Import\Reader\ReaderBuilder;
use Illuminate\Console\Command;

class MyImportCommand extends Command
{
    protected $signature = 'import:items {file}';
    
    public function handle(ReaderBuilder $builder)
    {
        $reader = $builder->build($this->argument('file'), []);
        
        foreach ($reader->read($this->argument('skip')) as $item) {
            // process item
        }
    }
}