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
правило, проверьте проверку здесь.