#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 Если это ответило на ваш вопрос, пожалуйста, пометьте его как принятый 🙂