Laravel/Carbon Timestamp 0000-00-00 00:00:00 или неожиданные данные найдены. Неожиданные данные найдены. Данные отсутствуют

У меня есть метка времени в БД, и я пытаюсь сохранить свиней. Я либо получаю вопрос, где MySQL отметка времени пуста или я получаю ошибку. Отправленный формат - британский стандарт.

Размещая данные, я попробовал некоторые из следующих действий:

$user['crb_date'] = Carbon::createFromFormat('d/m/Y', $data['crb_date']);

$user['crb_date'] = Carbon::createFromFormat('d/m/Y', $data['crb_date'])->toDateTimeString();

// Plus many other more std date(), strtodate() combos

На моей модели у меня есть пользовательские getDates, которые преобразуют даты в Carbon:

public function getDates()
{
    return [
        'last_login',
        'created_at',
        'updated_at',
        'dob',
        'crb_date'
    ];
}

Теперь, если я обновлю пользователя с датой карбонизации, я получу следующую проблему:

Unexpected data found. Unexpected data found. Data missing

Однако если я dd($user['crb_date'] после второй конверсии даты Carbon я получаю

string '2011-05-01 11:20:23' (length=19)

Что выглядит довольно хорошо для меня.

Если я удалю аксессор на модели, я отправлю его на публикацию, но получу пустую метку времени

0000-00-00 00:00:00

Я также пытался установить мутатор на модель, чтобы установить там дату, но проблема точно такая же.

Любые идеи, что я могу сделать, чтобы заставить это работать? Я думаю, что это может быть связано с аксессором, вызывающим проблему, но нужно, чтобы потом он работал с датами лучше.

Большое спасибо, что нашли время, чтобы помочь.

Это тот мутатор, который я пробовал - он был установлен на модели. Однако приведенный выше код (Carbon::createFormFormat... в настоящее время находится в моем репо:

public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

Аксессор:

public function getDates()
{
    return [
        'last_login',
        'created_at',
        'updated_at',
        'dob',
        'crb_date'
    ];
}

SORTED!

Благодаря ответу WereWolf ниже, я настроил мутатор модели, и теперь он работает как шарм. Вот что у меня сейчас:

public function setCrbDateAttribute($value)
{
    $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d/m/Y', $value)->toDateTimeString();
}

1 ответ

Решение

Проблема в вашем date Строка, например, у вас есть это:

public function setCrbDateAttribute($value)
{
     $this->attributes['crb_date'] = \Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}

Теперь, если есть дата, как 10-12-2014 то эта ошибка произойдет, потому что hour а также minute пропал, отсутствует. Таким образом, вы убедитесь, что дата содержит все элементы, а также убедитесь, что строка даты содержит - в качестве разделителя нет /,

Другими словами, проверьте $value прежде чем использовать Carbon и убедитесь, что ваша строка даты содержит точно такую ​​же отформатированную строку, которую вы использовали в методе.

Это также происходит в accessor метод, поэтому проверьте значение даты, прежде чем использовать его в Carbon::createFromFormat(),

Если вы получаете дату из пользовательского ввода, проверьте ее, прежде чем использовать, используя date или же date_format:format правило, проверьте проверку здесь.

Другие вопросы по тегам