如何在更新 CURRENT_TIMESTAMP 时将 Laravel 时间戳设置为 CURRENT_TIMESTAMP?

DDD
发布: 2024-10-20 12:17:02
原创
248 人浏览过

How to Set Laravel Timestamps to CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP?

Laravel 迁移的默认时间戳

Laravel 的架构生成器简化了数据库架构操作,但是将时间戳列的默认值设置为当前时间戳可能是一个挑战。

问题:

在 Laravel 中,timestamps() 生成默认值为 0000-00-00 00:00 的时间戳列。我们如何使用 Laravel 迁移将此默认值设置为 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP?

解决方案:

要指定 CURRENT_TIMESTAMP 作为时间戳列的默认值,请使用 DB: :raw():

<code class="php">$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));</code>
登录后复制

从 Laravel 5.1.25 开始,使用 useCurrent() 列修饰符:

<code class="php">$table->timestamp('created_at')->useCurrent();</code>
登录后复制

对于 ON UPDATE 子句,我们可以使用 DB::raw ():

<code class="php">$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));</code>
登录后复制

从 Laravel 8.36.0 开始,使用 useCurrentOnUpdate() 修饰符:

<code class="php">$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate();</code>
登录后复制

陷阱:

  • MySQL:从版本 5.7 开始,0000-00-00 00:00:00 不再是有效日期。设置有效的默认值或使用 nullable() 时间戳。
  • PostgreSQL 和 Laravel 4.x: 为 CURRENT_TIMESTAMP 指定零精度以避免微秒解析问题。
<code class="php">$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));</code>
登录后复制

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!