Laravel Maatwebsite / Laravel-Excel v3.1 импорт в коллекцию пустых строк со статусом - PullRequest
0 голосов
/ 27 февраля 2019

В настоящее время я строю проект в Laravel, клиент предоставляет данные через набор CSV, загруженных через FTP.

Для выполнения импорта я использую Laravel Maatwebsite / Laravel-Excel v3.1 для импорта файлов с помощью заданий в очереди.

Поскольку это автоматизированный процесс, я запускаю импорт с помощью заданий в моем методе handle:

Jobs / ProcessClientAddresses.php

public function handle()
{
    Excel::import(new ClientUserImport($this->file), $this->file->filename, 'import:processing');
}

В рамках импорта моего клиента у меня есть следующий код, код в методах добавления, обновления и удаления был удален для краткости:

class ClientUserImport implements ToCollection, WithHeadingRow, 
WithChunkReading {

use Importable;

protected $report = [];
protected $file;

public function __construct(FileImports $file)
{
    $this->file = $file;

    $this->file->status = "importing";
    $this->file->save();
}

public function collection(Collection $rows)
{
    if (count($rows)) {
        foreach ($rows as $row)
        {
            $operation = strtolower(strstr($row['operation'], '_', true));
            $this->{$operation}($row);
        }

        $this->file->report = $this->report;
        $this->file->status = "completed";
    } else {
        $this->report['errors'] = "No users to import";

        $this->file->report = $this->report;
        $this->file->status = "Completed, empty file";
    }

    $this->file->save();
}

public function add($row) {
    // Add code here
}

public function edit($row) {
    // update code here
}

public function delete($row) {
    // Delete code here
}

/**
 * @return int
 */
public function chunkSize(): int
{
    return 1000;
}

}

Текущая проблемасчастливый путь завершается абсолютно нормально, журнал импорта в базе данных корректно обновляется, и статус проходит через «загружен», «готов», «обрабатывается», «импортируется» и «завершен».

Проблема возникает, когдаклиент загружает файл CSV только с полями заголовка, метод Collection в классе ClientUserImport не запускается, если строки = 0 и, следовательно,Состояние импорта файла зависает при «импорте» даже после завершения задания.

Есть ли способ проверить в конструкторе, является ли коллекция пустой, и обновить статус на «Завершено, пустой файл»?

Я не могу найти ничего в документации после обхода всех разделов импорта.

...