Laravel の移行でデフォルトのタイムスタンプ列を CURRENT_TIMESTAMP に設定する方法は?

DDD
リリース: 2024-11-22 08:14:15
オリジナル
712 人が閲覧しました

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

Laravel: デフォルトのタイムスタンプ列を現在のタイムスタンプに設定する

問題:

Laravel のスキーマ ビルダー/移行では、ユーザーデフォルト値を使用してタイムスタンプ列を作成する方法に関するガイダンスを求めてください。 CURRENT_TIMESTAMP を更新時の CURRENT_TIMESTAMP。 timestamps() 関数は現在、作成された列と更新された列の両方でデフォルトで 0000-00-00 00:00 に設定されています。

解決策:

デフォルト値を設定するには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 00:00:00無効でした。これを解決するには、useCurrent() または nullable() を使用します。
  • PostgreSQL および Laravel 4.x: タイムスタンプ列のデフォルトの精度により、Carbon 解析で問題が発生しました。 DB::raw('CURRENT_TIMESTAMP(0)') を使用してゼロ精度を確保します。
  • PostgreSQL および Laravel 5.0 : デフォルトの精度はゼロになり、この問題は回避されます。

Laravel 4.x の問題については @andrewhl に、また問題については @ChanakaKarunarathne に感謝します。 useCurrentOnUpdate() ショートカット。

以上がLaravel の移行でデフォルトのタイムスタンプ列を CURRENT_TIMESTAMP に設定する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート