Laravel Excel队列导入.ods文件:无限堆叠与多余列异常问题
问题:Laravel Excel结合队列导入.ods文件异常
使用Spartner的Laravel Excel结合队列功能导入.ods文件时遇到两个异常:
- 控制器触发队列后,仅能正确导入一个工作表,后续ReadChunk任务陷入无限堆叠状态
- 导入.xlsx文件功能正常,但.ods文件导入时出现大量不属于目标表格的多余列(日志显示存在1023列)
日志信息(Log::info((new HeadingRowImport)))
[ 0 => [ 0 => [ 0 => 'nazvanie', 1 => 'region', 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, ... ], ], 1 => [ 0 => [ 0 => 'nazvanie', 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, ... 1023 => 1023, ], ], ]
控制器代码
public function import(array $request): RedirectResponse { (new CitiesImport)->import($request['file'])->chain([ new ImportCitiesJob(request()->user()), ]); toastr()->info(__('Start importing cities from a file'), __('Import')); return redirect()->back(); }
CitiesImport.php
<?php namespace App\Imports; use App\Imports\CitiesSheetImport; use App\Imports\RegionsSheetImport; use Maatwebsite\Excel\Concerns\Importable; use Illuminate\Contracts\Queue\ShouldQueue; use Maatwebsite\Excel\Concerns\WithChunkReading; use Maatwebsite\Excel\Concerns\WithMultipleSheets; class CitiesImport implements WithMultipleSheets, ShouldQueue, WithChunkReading { use Importable; public function sheets(): array { return [ 1 => new RegionsSheetImport(), 0 => new CitiesSheetImport(), ]; } public function chunkSize(): int { return 1000; } }
RegionsSheetImport.php
<?php namespace App\Imports; use App\Models\Regions\Region; use Illuminate\Support\Facades\Log; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\SkipsEmptyRows; use Maatwebsite\Excel\Concerns\WithChunkReading; use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Concerns\WithValidation; class RegionsSheetImport implements ToModel, WithHeadingRow, WithValidation, SkipsEmptyRows { public function model(array $row) { return Region::firstOrCreate(['name' => $row['nazvanie']]); } public function rules(): array { return [ 'nazvanie' => ['required', 'string', 'max:255'], ]; } }
CitiesSheetImport.php
<?php namespace App\Imports; use App\Models\Cities\City; use App\Models\Regions\Region; use Illuminate\Support\Facades\Log; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Concerns\SkipsEmptyRows; use Maatwebsite\Excel\Concerns\WithChunkReading; use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Concerns\WithValidation; class CitiesSheetImport implements ToModel, WithHeadingRow, WithValidation, SkipsEmptyRows { public function model(array $row) { return City::firstOrCreate([ 'name' => $row['nazvanie'], 'region_id' => Region::firstWhere('name', $row['region'])->id, ]); } public function rules(): array { return [ 'nazvanie' => ['required', 'string', 'max:255'], 'region' => ['required', 'string', 'exists:regions,name'], ]; } }
内容的提问来源于stack exchange,提问作者marioorg
相关产品推荐
相关产品推荐

