【问题标题】:How to solved "Undefined offset: 4" in laravel inport CSV file如何解决 laravel 导入 CSV 文件中的“未定义偏移量:4”
【发布时间】:2020-05-21 22:27:27
【问题描述】:

我尝试将 csv 文件导入数据库 我正在使用这个库Laravel Excel 但我有错误 当我尝试使用 dd 函数时,我看到只读取 csv 文件中的一行,这是标题行 在这行之后,我只看到 null 看起来是这样的

array:4 [
  0 => "OS_RAH;N_MARK;ZAV_NOMER;DIAM;N_MISC;DATA_VST;DATA_POV;DATA_NAST_POV;KIL_MISIAC;POP_POK;OST_POK;TIP;KON_POK;DATA_KON_POK;DATA_N_PLOMB;N_PLOMB"
  1 => null
  2 => null
  3 => null
]

如果有人知道如何解决这个问题,我将非常感激

这是我导入文件中的代码

use Importable;
public function model(array $row)
{
    HeadingRowFormatter::default('none');
    return new ImportPassportCounter([
        'OS_RAH' => $row[0],
        'N_MARK' => $row[1],
        'ZAV_NOMER' => $row[2],
        'DIAM' => $row[3],
        'N_MISC' => $row[4],
        'DATA_VST' => $row[5],
        'DATA_POV' => $row[6],
        'DATA_NAST_POV' => $row[7],
        'KIL_MISIAC' => $row[8],
        'POP_POK' => $row[9],
        'OST_POK' => $row[10],
        'TIP' => $row[11],
        'KON_POK' => $row[12],
        'DATA_KON_POK' => $row[13],
        'DATA_N_PLOMB' => $row[14],
        'N_PLOMB' => $row[15],
    ]);
}

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

这是我的模型文件中的代码

class ImportPassportCounter extends Model
{
    use Notifiable;
    protected $table = 'import_passport_counters';
    protected $fillable = [
        'OS_RAH',
        'N_MARK',
        'ZAV_NOMER',
        'DIAM',
        'N_MISK',
        'DATA_VST',
        'DATA_POV',
        'DATA_NAST_POV',
        'KIL_MISIAC',
        'POP_POK',
        'OST_POK',
        'TIP',
        'KON_POK',
        'DATA_KON_POK',
        'DATA_N_PLOMB',
        'N_PLOMB',
    ];
}

这是我的迁移文件

Schema::create('import_passport_counters', function (Blueprint $table) {
        $table->id();
        $table->text('OS_RAH')->nullable();
        $table->text('N_MARK')->nullable();
        $table->text('ZAV_NOMER')->nullable();
        $table->text('DIAM')->nullable();
        $table->text('N_MISK')->nullable();
        $table->text('DATA_VST')->nullable();
        $table->text('DATA_POV')->nullable();
        $table->text('DATA_NAST_POV')->nullable();
        $table->text('KIL_MISIAC')->nullable();
        $table->text('POP_POK')->nullable();
        $table->text('OST_POK')->nullable();
        $table->text('TIP')->nullable();
        $table->text('KON_POK')->nullable();
        $table->text('DATA_KON_POK')->nullable();
        $table->text('DATA_N_PLOMB')->nullable();
        $table->text('N_PLOMB')->nullable();
        $table->timestamps();
    });

这是我在控制器中的代码

$import = Excel::import(new PassportCounterImport, $request->file('file'));
    if ($import)
    {
        $result['success'] = true;
        $result['message'] = 'Success';
        return response()->json($result, 200);
    }

【问题讨论】:

  • 你能给我们看看CSV文件吗?
  • yes w8 几秒钟

标签: php laravel laravel-5 eloquent


【解决方案1】:

您似乎有一个以分号分隔的 .csv 文件。在您的PassportCounterImport.php 中添加您要使用自定义设置并定义delimeter

class PassportCounterImport implements WithCustomCsvSettings {
    public function getCsvSettings(): array
    {
        return [
            'delimeter' => ';',
        ];
    }
}

【讨论】:

  • 我很确定这是你需要走的路,确定你实现了接口吗?或者您正在运行哪个版本?
  • laravel 还是库?
  • "laravel/framework": "^7.0", "maatwebsite/excel": "^3.1",
  • 是的,我确定在我的界面中,因为导入 Excel 文件没有问题
  • “是的,我确定在我的界面中,因为导入 Excel 文件没有问题”你的类也应该实现的接口与海关设置有关,而不是导入。 Ofc 应该同时实现。
【解决方案2】:
类 PassportCounterImport 实现 ToModel、WithCustomCsvSettings { 公共函数模型(数组 $row) { HeadingRowFormatter::default('none'); 返回新的 ImportPassportCounter([ 'OS_RAH' => $row[0], 'N_MARK' => $row[1], 'ZAV_NOMER' => $row[2], 'DIAM' => $row[3], 'N_MISC' => $row[4], 'DATA_VST' => $row[5], 'DATA_POV' => $row[6], 'DATA_NAST_POV' => $row[7], 'KIL_MISIAC' => $row[8], 'POP_POK' => $row[9], 'OST_POK' => $row[10], '提示' => $row[11], 'KON_POK' => $row[12], 'DATA_KON_POK' => $row[13], 'DATA_N_PLOMB' => $row[14], 'N_PLOMB' => $row[15], ]); } 公共函数 getCsvSettings(): 数组 { 返回 [ '分隔符' => ';', ]; } }

是分隔符而不是分隔符

实现 ToModel、WithCustomCsvSettings

加号

实现 ToModel、WithCustomCsvSettings、WithStartRow

public function startRow(): int
{
    return 2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 2018-05-06
    相关资源
    最近更新 更多