Laravel数据库迁移中,如何使用DB::raw设置字段默认当前时间值?

2026-05-03 00:192阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计758个文字,预计阅读时间需要4分钟。

Laravel数据库迁移中,如何使用DB::raw设置字段默认当前时间值?

MySQL 5.6.5 或 PostgreSQL 才能使用 DB::raw() 给字段设置默认时间表达式,Laravel 迁移里直接写 + useCurrent() 或 useCurrentOnUpdate() 更安全、更易移植。

MySQL 中用 DB::raw('CURRENT_TIMESTAMP') 设默认值会失败

很多人在迁移里这么写:

Schema::table('posts', function (Blueprint $table) { $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'))->change(); });

这会在 MySQL 5.6.5 以下或严格模式下报错:SQLSTATE[HY000]: General error: 1067 Invalid default value for 'created_at'。原因:MySQL 要求 TIMESTAMP / DATETIME 的默认表达式必须是常量(如 CURRENT_TIMESTAMP),但 Laravel 的 DB::raw()default() 中不会被识别为“字面量”,而是当成字符串值插入,最终生成类似 DEFAULT 'CURRENT_TIMESTAMP' 的 SQL —— 带引号就失效了。

阅读全文
标签:Laravel

本文共计758个文字,预计阅读时间需要4分钟。

Laravel数据库迁移中,如何使用DB::raw设置字段默认当前时间值?

MySQL 5.6.5 或 PostgreSQL 才能使用 DB::raw() 给字段设置默认时间表达式,Laravel 迁移里直接写 + useCurrent() 或 useCurrentOnUpdate() 更安全、更易移植。

MySQL 中用 DB::raw('CURRENT_TIMESTAMP') 设默认值会失败

很多人在迁移里这么写:

Schema::table('posts', function (Blueprint $table) { $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'))->change(); });

这会在 MySQL 5.6.5 以下或严格模式下报错:SQLSTATE[HY000]: General error: 1067 Invalid default value for 'created_at'。原因:MySQL 要求 TIMESTAMP / DATETIME 的默认表达式必须是常量(如 CURRENT_TIMESTAMP),但 Laravel 的 DB::raw()default() 中不会被识别为“字面量”,而是当成字符串值插入,最终生成类似 DEFAULT 'CURRENT_TIMESTAMP' 的 SQL —— 带引号就失效了。

阅读全文
标签:Laravel