Обнаружены неожиданные данные. Обнаружены неожиданные данные. Конечные данные - PullRequest
0 голосов
/ 14 июля 2020

Я создаю функцию импорта Excel, и она работает нормально, пока я не заметил, что дата не вставлена ​​должным образом, поэтому я пытаюсь отформатировать дату, например Y-m-d, чтобы правильно сохранить в MySql, но углерод выдает ошибку ниже

Углерод \ Исключения \ InvalidFormatException

Обнаружены непредвиденные данные. Обнаружены неожиданные данные. Конечные данные

В Excel у меня может быть d/m/Y или Y/m/d, поэтому я хочу отформатировать его в базу данных

Мой код импорта

public function model(array $row)
{
    return new Staff([
        'employee_no'               => $row['id'],
        'name'                      => $row['name'],
        'address'                   => $row['address'],
        'fathers_name'              => $row['father'],
        'dob'                       => $this->transformDate($row['dob']),
        'blood_group'               => $row['blood_group'],
        'phone'                     => $row['phone'],
        'password'                  => Hash::make($row['id']),
    ]);
}

public function transformDate($value, $format = 'Y-m-d')
{
    try {
        return \Carbon\Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value));
    } catch (\ErrorException $e) {
        return \Carbon\Carbon::createFromFormat($format, $value);
    }
}

Моя модель персонала

class Staff extends Authenticatable
{
  protected $fillable = [
    'name', 'employee_no', 'designation_id', 'fathers_name', 'dob', 'identification_mark', 'blood_group', 'phone', 'address', 'height', 'rfid_no', 'building_id', 'password',
  ];

  protected $casts = ['dob'];
}

Каков правильный путь, или мне нужно подходить к новому format для dob

1 Ответ

1 голос
/ 14 июля 2020

Carbon::createFromFormat($format, $time) должен получить формат данного $time, а не формат, в который вы хотите преобразовать. Попробуйте изменить его на $format = 'd/m/Y', как вы сказали, это формат, который вы ожидаете получить из записей.

После этого вы можете получить формат базы данных, просто введя ->toDateString() или ->toDateTimeString() в Углеродный объект.

См. Также:

...