Eloquent: неверное значение по умолчанию с отметками времени - PullRequest
0 голосов
/ 03 мая 2018

Вот моя схема миграции:

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 без знака, не ноль) первичный ключ auto_increment, timestamp1 отметка времени не равна нулю, timestamp2 отметка времени не равна нулю) набор символов по умолчанию utf8mb4 collate utf8mb4_unicode_ci)

Я должен указать, что когда я удаляю одну из строк 2 $table->timestamp(...);, она работает, но не при наличии обеих. И модель Object.php пуста, как это может быть. Я сделал ошибку?

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

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Вы можете сделать одну из двух отметок времени обнуляемой, используя

timestamp()->nullable();

используя ваш пример, вы должны использовать:

$table->timestamp('timestamp2')->nullable();

Также laravel встроил временные метки с помощью

$table->timestamps();

, который автоматически обрабатывает метки времени updated_at и selected_at для вас

0 голосов
/ 03 мая 2018

Временные метки немного особенные, они должны либо иметь значение NULL, либо иметь значение по умолчанию. Таким образом, вы должны выбрать между timestamp('timestamp1')->nullable(); или timestamp('timestamp1')->useCurrent() или пользовательским значением по умолчанию, например timestamp('timestamp1')->default(DB::raw('2018-01-01 15:23')).

0 голосов
/ 03 мая 2018

Я нашел это решение для laracasts:

nullableTimestamps() только для полей по умолчанию created_at, updated_at. для пользовательских полей используйте timestamp()->nullable();

...