首頁 >後端開發 >php教程 >如何在 Laravel 遷移中將時間戳列的預設值設為 CURRENT_TIMESTAMP 並自動更新?

如何在 Laravel 遷移中將時間戳列的預設值設為 CURRENT_TIMESTAMP 並自動更新?

Barbara Streisand
Barbara Streisand原創
2024-10-20 12:26:02508瀏覽

How Do I Set the Default Value of Timestamp Columns to CURRENT_TIMESTAMP and Auto Update in Laravel Migrations?

在Laravel 遷移中將時間戳列的預設值設定為當前時間戳

問題: 如何建立問題時間戳列的預設值為CURRENT_TIMESTAMP 並在Laravel 遷移中將其更新為CURRENT_TIMESTAMP?

Laravel 的 Schema Builder 沒有明確提供將時間戳列的預設值設為 CURRENT_TIMESTAMP 的方法。

答案:

要將預設值設為CURRENT_TIMESTAMP,請使用DB::raw() 方法定義原始表達式:

$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

對於MySQL,您可以另外,在DB::raw() 中使用ON UPDATE 子句:

$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

從Laravel 5.1.25 開始,您可以使用useCurrent() 方法來簡化此操作:

$table->timestamp('created_at')->useCurrent();

在Laravel 8.36.0 及更高版本中,useCurrent() 可以與useCurrentOnUpdate() 方法一起用於預設值和更新值:

$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate();

  • 陷阱:
  • MySQL:
從版本5.7 開始,0000-00-00 00:00:00 不再有效作為時間戳。使用 useCurrent() 或允許 null 值。
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));
Laravel 4.x 中的 PostgreSQL: 為 CURRENT_TIMESTAMP 函數指定零精確度以避免微秒錯誤。

以上是如何在 Laravel 遷移中將時間戳列的預設值設為 CURRENT_TIMESTAMP 並自動更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn