Ошибка исключения Laravel Excel Неопределенное смещение: 0

#excel #laravel #import #import-from-excel #laravel-excel

#excel #laravel #импорт #импорт из excel #laravel-excel

Вопрос:

Пытаюсь импортировать данные Excel в мою базу данных mysql и получаю ошибку исключения Неопределенное смещение: 0.

Пробовал использовать var_dump($row) для проверки массива строки данных. Он выглядит выключенным и не уверен, как сделать так, чтобы данные отображались красиво, чтобы их можно было передавать в БД.

 array(5) { ["a"]=> string(1) "B" ["white"]=> string(5) "Green" ["example1_at_gmailcom"]=> string(18) "example2@gmail.com" [60123456789]=> int(60162313142) [5]=> int(5) }
  

Это мои данные Excel:

введите описание изображения здесь

Модель

  public function model(array $row)
{
    var_dump($row);
    return new ContactList([
        'first_name' => $row[0],
        'last_name' => $row[1],
        'email' => $row[2],
        'phone' => $row[3],
        'group_id' => $row[4],
    ]);
}
  

Я уже пробовал использовать замену $row[] на string, и он отлично работает, сохраняя данные в моей БД.

Контроллер

 if($request->hasFile('selected_file')){

            $file = $request->file('selected_file');
            Excel::import(new ContactListsImport, $file);


            return redirect()->back()->with('success', 'Data saved successfully!');
        }
  

Комментарии:

1. вы сбрасываете полученный массив… вы видите 0 в нем ключ?

2. извините, я новичок в этом. Нет, я этого не видел, но даже я удалил vardump, я все еще получаю ту же ошибку ErrorException Неопределенное смещение: 0

3. потому что нет индекса 0 , как вы можете видеть, когда вы выгрузили массив, и нет ключа 0 … вы не можете получить доступ к ключам массива, которые не существуют … здесь возникает проблема, поскольку первая строка этого файла используется в качестве заголовков (имен столбцов), вам следует ознакомиться с документацией, чтобы настроить это или не использовать это поведение

4. Просто к вашему сведению, но Laravel использует компонент Symfony VarDumper, поэтому вы можете использовать dump() и dd() для более удобочитаемого вывода.

5. Какую версию Laravel и Laravel Excel вы используете?

Ответ №1:

Вам необходимо удалить WithHeadingRow интерфейс из вашего класса импорта, чтобы использовать числовые индексы для массива.

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

Комментарии:

1. Да, я думаю, это причина, почему

2. @N.Tec Если это ответило на ваш вопрос, пожалуйста, пометьте его как принятый 🙂