ホームページ >データベース >mysql チュートリアル >Laravel の移行でデフォルトのタイムスタンプ列を CURRENT_TIMESTAMP に設定する方法は?

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

DDD
DDDオリジナル
2024-11-22 08:14:15796ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。