以下のマイグレーションファイルを作成し実行した。
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->string('name', 255);
$table->timestamp('start_datetime');
$table->timestamp('end_datetime');
$table->timestamps();
});
}
すると、以下のエラーが発生した。
ちなみにこのSQLをDBに直接実行すると正常にテーブル作成が完了する。
なのでSQLのエラーと言うよりLaravelのエラー。
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'end_datetime' (SQL: create table `events` (`id` bigint unsigned not null auto_increment primary key,`name` varchar(255) not null, `start_datetime` timestamp not null, `end_datetime` timestamp not null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')
で、解決方法としてはtimestampはデフォルト値を設定するか、Null許容にする必要があるらしい。
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->string('name', 255);
$table->timestamp('start_datetime')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('end_datetime')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamps();
});
}
ドキュメントには特に記載なかったので、↓を参考に。