[英]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.