首頁 >資料庫 >mysql教程 >如何在 Laravel 遷移中將預設時間戳列設定為 CURRENT_TIMESTAMP?

如何在 Laravel 遷移中將預設時間戳列設定為 CURRENT_TIMESTAMP?

DDD
DDD原創
2024-11-22 08:14:15734瀏覽

How to Set Default Timestamp Columns to CURRENT_TIMESTAMP in Laravel Migrations?

Laravel:將預設時間戳列設定為目前時間戳記

問題:

在Laravel 的架構產生器/遷移中,使用者尋求有關如何建立預設值為時間戳列的指導更新CURRENT_TIMESTAMP 時的CURRENT_TIMESTAMP。對於建立和更新的列,timestamps() 函數目前預設為 0000-00-00 00:00。

解決方案:

設定a 的預設值使用Laravel 遷移將時間戳列設定為CURRENT_TIMESTAMP,使用DB::raw():

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

從Laravel 5.1.25 開始,您可以使用useCurrent()列修飾符來簡化此操作:

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

對於MySQL,ON UPDATE CURRENT_TIMESTAMP 可以透過DB::raw():

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

開始使用Laravel 8.36.0,useCurrent( ) 和useCurrentOnUpdate()一起可以達到相同的效果:

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

陷阱:

  • MySQL: 5.7 之前,0000-00-00 0 :00:00 無效。使用 useCurrent() 或 nullable() 來解決這個問題。
  • PostgreSQL 和 Laravel 4.x: 時間戳列的預設精確度導致 Carbon 解析出現問題。使用 DB::raw('CURRENT_TIMESTAMP(0)') 確保零精度。
  • PostgreSQL & Laravel 5.0 : 預設精確度現在為零,防止此問題出現。

感謝 @andrewhl 提出的 Laravel 4.x 問題和 @ChanakaKarunarathne 提出的使用CurrentOnUpdate() 快捷方式。

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

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