php – 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1616字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?](/upload/InfoBanner/zyjiaocheng/714/f14869d8793d414787ae6fce16432d28.jpg)
我想使用Laravel架构生成器/迁移创建一个时间戳列,其默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.我已多次浏览Laravel文档,但我看不出如何将其作为timestamp列的默认值.
timestamps()函数使得它所生成的两列都使用默认的00:00.
解决方法:
鉴于它是一个原始表达式,您应该使用DB :: raw()将CURRENT_TIMESTAMP设置为列的默认值:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
这在每个数据库驱动程序上都可以正常运行.
新的捷径
从Laravel 5.1.25开始(参见PR 10962和commit 15c487fe),您可以使用新的useCurrent()列修饰符方法将CURRENT_TIMESTAMP设置为列的默认值:
$table->timestamp('created_at')->useCurrent();
回到问题,在MySQL上你也可以通过DB :: raw()使用ON UPDATE子句:
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
陷阱
> MySQL
从MySQL 5.7开始,00:00:00不再被视为有效日期.如Laravel 5.2 upgrade guide所述,当您将记录插入数据库时??,所有时间戳列都应该收到有效的默认值.您可以在迁移中使用useCurrent()列修饰符(来自Laravel 5.1.25及更高版本)将timestamp列默认为当前时间戳,或者可以使时间戳nullable()允许空值.
> PostgreSQL& Laravel 4.x
在Laravel 4.x版本中,PostgreSQL驱动程序使用默认数据库精度来存储时间戳值.在具有默认精度的列上使用CURRENT_TIMESTAMP函数时,PostgreSQL会生成具有更高精度的时间戳,从而生成带有小数第二部分的时间戳 – see this SQL fiddle.
这将导致Carbon无法解析时间戳,因为它不会期望存储微秒.为了避免这种意外行为破坏您的应用程序,您必须显式地为CURRENT_TIMESTAMP函数提供零精度,如下所示:
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));
从Laravel 5.0开始,timestamp()列已更改为使用默认精度零,这样可以避免这种情况.
感谢@andrewhl在评论中指出了这个问题.
内容总结
以上是互联网集市为您收集整理的php – 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?全部内容,希望文章能够帮你解决php – 如何使用Laravel迁移将时间戳列的默认值设置为当前时间戳?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。