В настоящее время я строю проект в 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 и, следовательно,Состояние импорта файла зависает при «импорте» даже после завершения задания.
Есть ли способ проверить в конструкторе, является ли коллекция пустой, и обновить статус на «Завершено, пустой файл»?
Я не могу найти ничего в документации после обхода всех разделов импорта.