首页  >  文章  >  后端开发  >  如何在 Laravel 迁移中将时间戳列的默认值设置为 CURRENT_TIMESTAMP 并自动更新?

如何在 Laravel 迁移中将时间戳列的默认值设置为 CURRENT_TIMESTAMP 并自动更新?

Barbara Streisand
Barbara Streisand原创
2024-10-20 12:26:02382浏览

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 值。
  • Laravel 4.x 中的 PostgreSQL: 为 CURRENT_TIMESTAMP 函数指定零精度以避免微秒错误。
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));

以上是如何在 Laravel 迁移中将时间戳列的默认值设置为 CURRENT_TIMESTAMP 并自动更新?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn