首页  >  文章  >  后端开发  >  如何使用 Laravel 迁移用当前时间戳填充时间戳列?

如何使用 Laravel 迁移用当前时间戳填充时间戳列?

Barbara Streisand
Barbara Streisand原创
2024-10-20 12:28:30961浏览

How Do I Populate Timestamp Columns with Current Timestamp Using Laravel Migrations?

如何使用 Laravel 迁移使用当前时间戳填充时间戳列

问题陈述

Laravel 中时间戳列的默认值使用架构生成器的迁移设置为“0000-00-00 00:00:00”;我们如何将其修改为“CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP”?

解决方案

利用 DB::raw() 将 CURRENT_TIMESTAMP 合并为列的默认值:

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

或者,在 Laravel 5.1.25 之后,您可以直接在时间戳列上使用 useCurrent() 方法:

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

对于 MySQL,包括使用 DB: 的 ON UPDATE 子句: raw() 或者,从 Laravel 8.36.0 开始,useCurrentOnUpdate() 方法:

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

注意事项

  • MySQL(版本 5.7 及以上) ):“0000-00-00 00:00:00”不再有效。因此,为时间戳列提供有效的默认值(例如 useCurrent() 或 nullable())。
  • PostgreSQL (Laravel 4.x): 确保为 CURRENT_TIMESTAMP 指定零精度以防止由于小数秒导致的时间戳解析错误:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));

感谢 @andrewhl 识别 Laravel 4.x PostgreSQL 问题,以及 @ChanakaKarunarathne 提供 useCurrentOnUpdate() 快捷方式。

以上是如何使用 Laravel 迁移用当前时间戳填充时间戳列?的详细内容。更多信息请关注PHP中文网其他相关文章!

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