laravel Excel Импорт заголовка набора на столбце - PullRequest
2 голосов
/ 10 октября 2019

У меня есть функция импорта из laravel excel, она работала, но теперь я хочу добавить к ней заголовок, и он не работает. В моем листе Excel есть только 1 столбец, и заголовок называется Unit Type.

<?php

namespace App\Imports;

use App\UnitType;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UnitTypesImport implements ToCollection, WithHeadingRow
{
    protected $user_id;
    protected $proj_id;

    public function __construct($user_id, $proj_id)
    {
        $this->user_id = $user_id;
        $this->proj_id = $proj_id;
    }

    public function collection(Collection $rows)
    {
        foreach ($rows as $row)
        {   
            $unit_types_count = UnitType::where('name', $row[0])->where('project_id', $this->proj_id)->count();
            if ($unit_types_count == 0){
                UnitType::create([
                    'name'       => $row['unit_type'],
                    'created_by' => $this->user_id,
                    'project_id' => $this->proj_id,
                ]);
            } 
        } 
    }

    public function headingRow(): int
    {
        return 0;
    }
}

, когда я пытаюсь использовать метод WithHeadingRow, теперь он дает мне ошибку как:

Неопределенное смещение: 0

Ответы [ 3 ]

2 голосов
/ 10 октября 2019

Согласно Документам https://docs.laravel -excel.com / 3.1 / import / heading-row.html вам не нужно добавлять функцию headingRow(), если ваш заголовок находится на первой строке.

Поэтому попробуйте удалить функцию headingRow() и выполнить ее снова.

2 голосов
/ 10 октября 2019

Продолжая с ответа @ thmspl,

Используйте $row['unit_type'] в строке

$unit_types_count = UnitType::where('name', $row[0])->where('project_id', $this->proj_id)->count();

вместо $row[0].

2 голосов
/ 10 октября 2019

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

public function headingRow(): int
    {
        return 0;
    }

...