如何在 Laravel 迁移中将默认时间戳列设置为 CURRENT_TIMESTAMP?

DDD
发布: 2024-11-22 08:14:15
原创
713 人浏览过

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 00: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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板