Вот моя схема миграции:
public function up()
{
Schema::create('objects', function (Blueprint $table) {
$table->increments('id');
$table->timestamp('timestamp1');
$table->timestamp('timestamp2');
});
}
Но когда я выполню php artisan migrate
Я получаю эту ошибку:
Подсветка \ База данных \ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1067 Неверное значение по умолчанию для ‘timestamp2’ (SQL: создать таблицу
objects
(id
int unsigned не нулевой первичный ключ auto_increment,timestamp1
временная метка не нулевая,timestamp2
отметка времени не равна нулю) набор символов по умолчанию utf8mb4 collate utf8mb4_unicode_ci)
Я должен указать, что когда я удаляю один из 2 $table->timestamp(...);
Линии это работает, но это не так, когда есть оба. И Object.php
Модель пуста, как это может быть. Я сделал ошибку?
я прочитал эта почта, но хотя ошибок больше нет когда меняю timestamp(...)
в dateTime(...)
Я хочу только метки времени.
я нашел этот Решение по Laracasts:
nullableTimestamps()
только для полей по умолчанию created_at
, updated_at
, для пользовательских полей используйте timestamp()->nullable();
Вы можете сделать одну из двух меток времени обнуляемой, используя
timestamp()->nullable();
используя ваш пример, вы бы использовали:
$table->timestamp('timestamp2')->nullable();
Также laravel имеет встроенные временные метки, используя
$table->timestamps();
который будет автоматически обрабатывать метки времени updated_at и made_at для вас
Временные метки немного особенные, они должны либо иметь значение NULL, либо иметь значение по умолчанию. Таким образом, вы должны выбрать между timestamp('timestamp1')->nullable();
или же timestamp('timestamp1')->useCurrent()
или пользовательское значение по умолчанию, например timestamp('timestamp1')->default(DB::raw('2018-01-01 15:23'))
,