Миграция Laravel не работает, но запрос работает

У меня есть миграция, которая не запускается.

public function up()
{
Schema::create('users_watch_history', function (Blueprint $table) {
$table->string('id', 36)->primary();
$table->string('user_id', 36);
$table->string('video_id', 36);
$table->string('course_id', 36);
$table->timestamp('last_timestamp');
$table->float('vid_watch', 5, 2);
$table->float('total_watch', 5, 2);
$table->text('watched_parts');
$table->integer('last_position');
$table->softDeletes();

$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade')->onUpdate('cascade');

$table->foreign('video_id')
->references('id')->on('videos')
->onDelete('cascade')->onUpdate('cascade');

$table->foreign('course_id')
->references('id')->on('courses')
->onDelete('cascade')->onUpdate('cascade');
});
}

когда миграция действительно выполняется, я продолжаю получать сообщения об ошибках о недопустимых значениях по умолчанию для last_timestamp колонка.

$ php artisan migrate[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid
default value for 'last_timestamp' (SQL: create table
`users_watch_history` (`id` varchar(36) not null, `user_id`
varchar(36) not null, `video_id` varchar(36) not null, `course_id`
varchar(36) not null, `last_timestamp` timestamp not null,
`vid_watch` double(5, 2) not null, `total_watch` double(5, 2) not
null, `watched_parts` text not null, `last_position` int not null,
`deleted_at` timestamp null) default character set utf8 collate utf8_unicode_ci)[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'last_timestamp'

моя версия MySQL

> select @@version
+------------+
| @@version  |
+------------+
| 5.6.34-log |
+------------+
1 row in set (0.20 sec)

Но поворот, который бросает меня за кривую, — если я запускаю команду создания в CLI для БД, все работает нормально?

> create table `users_watch_history` (`id` varchar(36) not null, `user_id` varchar(36) not null, `video_id` varchar(36) not null, `course_id` varchar(36) not null, `last_timestamp` timestamp not null, `vid_watch` double(5, 2) not null, `total_watch` double(5, 2) not null, `watched_parts` text not null, `last_position` int not null, `deleted_at` timestamp null) default character set utf8 collate utf8_unicode_ci;
Query OK, 0 rows affected (0.19 sec)

схема таблицы:

> show create table users_watch_history \G
*************************** 1. row ***************************
Table: users_watch_history
Create Table: CREATE TABLE `users_watch_history` (
`id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`user_id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`video_id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`course_id` varchar(36) COLLATE utf8_unicode_ci NOT NULL,
`last_timestamp` timestamp NOT NULL,
`vid_watch` double(5,2) NOT NULL,
`total_watch` double(5,2) NOT NULL,
`watched_parts` text COLLATE utf8_unicode_ci NOT NULL,
`last_position` int(11) NOT NULL,
`deleted_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.17 sec)

Любая идея, что может быть причиной того, что этот действительный запрос не проходит через миграцию?

1

Решение

отключить строгий режим MySQL.

  • В вашем конфигурационном файле laravel database.php, задавать ‘strict' => true
    кstrict' => false
  • или добавить nullable() в
    $table->timestamp('last_timestamp')->nullable();

    Один из них
    должен решить проблему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector