You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:07:09