【发布时间】:2017-11-06 17:31:32
【问题描述】:
我已经看到了一些关于如何使用 CURRENT_TIMESTAMP 将时间戳列的默认值设置为当前日期时间的主题。但是,我正在寻找如何将默认设置为 CURRENT_TIMESTAMP + 1 年。
我试过了,但没有成功:
Schema::table('users', function (Blueprint $table) {
$table->timestamp('expires')->default(DB::raw('NOW() + INTERVAL 1 YEAR'))->after('updated_at');
});
收到此错误:
SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 '+ INTERVAL 1 附近使用正确的语法 第 1 行
updated_at' 之后的一年(SQL:alter tableusers添加expirestimestamp not null 默认NOW() + INTERVAL 1 YEAR afterupdated_at)SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 '+ INTERVAL 1 附近使用正确的语法 在第 1 行更新后的年份
知道如何将此列的默认值设置为从当前日期算起的一年吗?
【问题讨论】:
-
PHP会更好地处理这件事吗?插入新记录时,设置$newRecord->expires = \Carbon\Carbon::now()->addYears(1);,作为一个简单的例子。 -
@TimLewis 这绝对是另一种选择 - 只是想知道是否有办法直接使用 create 语句设置默认值。
-
你不能在时间戳字段的 dafult 值中做 - 在这里查看 mysql 文档:dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html。您只能将默认设置为当前时间戳或自动更新