簡體   English   中英

更改所有表,將默認值設置為null

[英]alter all tables set default value to null

由於舊的laravel應用程序中的舊版遷移,許多$table->timestamps(); table- $table->timestamps(); 的默認值是0000-00-00 00:00:00 由於我們的新mysql版本不允許使用日期作為時間戳的默認值,因此我們必須更改所有表以將所有表created_atupdated_at列的默認值設置為NULL


在Laravel中,我們如何在遷移文件中完成此任務?

  • 一種遍歷所有表並檢查是否有created_atupdated_at列並將其默認值設置為NULL或將時間戳設置為可為空的方法?
  • 遍歷所有created_atupdated_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM