由于我们旧的laravel应用程序中的旧迁移,许多$table->timestamps();
的默认值为0000-00-00 00:00:00
。由于我们的新mysql版本不允许这样的日期作为时间戳的默认值,我们必须更改所有表以设置created_at
和{{1}的默认值所有表格的列updated_at
Laravel如何在迁移文件中完成此任务?
NULL
和created_at
列并将其默认值设置为updated_at
或将时间戳设置为可空的方法?NULL
和created_at
列并将其值设置为updated_at
任何人都可以帮助我吗? : - )
答案 0 :(得分:0)
尝试这样的操作(在更改列之前,请确保将doctrine/dbal
依赖项添加到composer.json
文件中。):
$tables = DB::select('SHOW TABLES'); // returns an array of tables
foreach($tables as $table) {
Schema::table($table, function ($t) {
$t->nullableTimestamp('created_at')->change();
$t->nullableTimestamp('updated_at')->change();
});
}
答案 1 :(得分:0)
您可以看一下:https://laravel.com/docs/5.3/migrations#modifying-columns
您可以生成update_users_table
之类的新迁移,以便将$ up
方法放在$ table上的nullableTimestamps
方法中,如下所示:
Schema::table('users', function ($table) {
$table->nullableTimestamps()->useCurrent()->change();
});
来源:https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0
MySQL日期
从MySQL 5.7开始,由于默认情况下启用了严格模式,因此00:00:00不再被视为有效日期。将记录插入数据库时,所有时间戳列都应接收有效的默认值。您可以在迁移中使用useCurrent方法将timestamp列默认为当前时间戳,或者可以使时间戳可以为空以允许空值:
$table->timestamp('foo')->nullable();
$table->timestamp('foo')->useCurrent();
$table->nullableTimestamps();