Laravel 5.7: SQLSTATE[22007]: недопустимый формат даты и времени: 1292 Неверное значение даты: ‘35492’ для столбца ‘resident_dob’ в строке 1

#excel #laravel #import #laravel-5.7

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

Вопрос:

Я пытаюсь импортировать файл Excel, содержащий некоторые данные, и произошла ошибка

SQLSTATE [22007]: Недопустимый формат даты и времени: 1292 Неверное значение даты: ‘35492’ для столбца ‘resident_dob’ в строке 1

Сначала я предположил, что это могло быть связано с данными в файле Excel, и я заметил, что его формат не соответствует формату в SQL, поэтому я попытался изменить его, но произошла та же ошибка. кстати, вот данные файла Excel

Вот код для модели:

 public function model(array $row)
{
    return new Resident([
        'resident_fname' => $row[0],
        'resident_lname' => $row[1],
        'resident_mi'    => $row[2],
        'resident_dob'   => $row[3],
        'role'           => $row[4],
        'resident_age'   => $row[5],
        'resident_address'  => $row[6],
        'resident_contact'  => $row[7],
        'resident_email'    => $row[8],
        'resident_purok'    => $row[9],
        'resident_status'   => $row[10],
        'resident_gender'   => $row[11],
        'resident_religion' => $row[12],
        'ResidentVoter_status'  => $row[13],
    ]);
}
  

Я действительно понятия не имею, что делать с этой ошибкой. Кто-нибудь может мне помочь с этим? Я все еще новичок в Laravel.

Ответ №1:

Проблема в том, что SQL не поддерживает формат даты, который вы вводите в Excel (если не изменена конфигурация по умолчанию)

По умолчанию SQL может хранить вашу дату как 1997-03-03 00:00:00, что переводится в Y-m-d H:i:s в формате даты PHP

Поэтому вам нужно вручную преобразовать его в ожидаемый формат, используя либо DateTime, либо пакет Carbon от laravel. Ниже я использовал Carbon

Объявите это вверху

 use Carbon;
  

А теперь преобразуйте дату

 'resident_dob' => Carbon::parse($row[3])->format('Y-m-d H:i:s');
  

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

1. Отлично работает! Мне пришлось отформатировать его как ‘Y-m-d’ для типа даты, чтобы

2. @SalimDjerbouh Согласно документам Carbon на carbon.nesbot.com/laravel , «Как только вам нужно сохранить дату (со временем или без него), вы должны сохранить полное datetime».