[英]alter all tables set default value to null
由于旧的laravel应用程序中的旧版迁移,许多$table->timestamps();
table- $table->timestamps();
的默认值是0000-00-00 00:00:00
。 由于我们的新mysql版本不允许使用日期作为时间戳的默认值,因此我们必须更改所有表以将所有表的created_at
和updated_at
列的默认值设置为NULL
在Laravel中,我们如何在迁移文件中完成此任务?
created_at
和updated_at
列并将其默认值设置为NULL
或将时间戳设置为可为空的方法? created_at
和updated_at
列,并将它们的值设置为NOW()
有人可以协助我吗? :-)
尝试这样的操作(在更改列之前,请确保将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();
});
}
您可以对此进行查看: https : //laravel.com/docs/5.3/migrations#modifying-columns
您可以生成新的迁移,例如update_users_table
,以便将up
方法的nullableTimestamps
方法放在$ table上,如下所示:
Schema::table('users', function ($table) {
$table->nullableTimestamps()->useCurrent()->change();
});
资料来源: https : //laravel.com/docs/5.3/upgrade#upgrade-5.3.0
MySQL日期
从MySQL 5.7开始,因为默认情况下启用了严格模式,所以不再将0000-00-00 00:00:00视为有效日期。 当您将记录插入到数据库中时,所有时间戳列都应收到有效的默认值。 您可以在迁移中使用useCurrent方法将timestamp列默认为当前时间戳,或者可以使timestamps为可空以允许空值:
$table->timestamp('foo')->nullable();
$table->timestamp('foo')->useCurrent();
$table->nullableTimestamps();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.