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

Barbara Streisand
发布: 2024-10-20 12:26:02
原创
381 人浏览过

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

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