Я просто попал в ловушку с отметками времени по умолчанию Eloquent (Laravel 5.2.10). По умолчанию метод $table->timestamps()
дает вам created_at
и столбец updated_at
в вашей таблице, которые соответствующим образом обновляются.Laravel Eloquent created_at обновляется
Однако, когда я пытался несколько записей тестов, я заметил, что при обновлении записи, то updated_at
поля обновляется, как и положено, но created_at
поля также обновляется: его часы остаются в созданном время , но минуты и секунды обновляются, чтобы соответствовать полю updated_at
.
Если бы это было слишком многословным, вот пример:
+---------------------+---------------------+
| created_at | updated_at |
+---------------------+---------------------+
| 2016-01-13 17:13:27 | 2016-01-13 22:13:27 |
| 2016-01-13 16:14:41 | 2016-01-13 21:14:41 |
+---------------------+---------------------+
Обратите внимание, что в минуты и секунды таже для поля created_at
и updated_at
.
Я попытался просмотреть класс Model
, где установлены временные метки, но оказывается, что метод setCreatedAt()
действительно не вызывается при простом обновлении записи.
Почему так ли это?
Как предотвратить изменение поля created_at
? (Более важен)
Я запустил «обновление для композитора», которое привело меня к 5.2.10, но метод 'timestamps()' все еще не работал должным образом.Тем не менее, 'nullableTimestamps()' работает очень хорошо, поэтому я буду использовать это на данный момент (проблема, на которую вы указали мне, казалось, указывала, что это станет поведением 'timestamps()' по умолчанию, но пока это все еще не работает для меня. В любом случае, спасибо! – tam5
@tam Извините, что с 5 часов назад (Laravel 5.2.9+) изменения были отменены, поэтому 'useCurrent()' не является поведением по умолчанию. Это вызвало некоторые проблемы с людьми которые используют более старую версию MySQL. –
проблем нет. Спасибо за альтернативу и объяснения – tam5