我已经看到了一些关于如何使用CURRENT_TIMESTAMP将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
添加expires
时间戳不为空默认NOW()+ INTERVAL 1年后updated_at
)SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误;查看与您的手册相对应的手册 MySQL服务器版本,在'+ INTERVAL 1附近使用正确的语法 在第1行的updated_at'之后的年份
有关如何将此列的默认值设置为距当前日期一年的任何想法吗?
答案 0 :(得分:3)
您可以通过创建触发器让数据库处理所有内容。
创建表/插入表/创建触发器
CREATE DATABASE IF NOT EXISTS stackoverflow;
USE stackoverflow;
DROP TABLE IF EXISTS users;
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
, user_name VARCHAR(255)
, expires DATETIME
);
DROP TRIGGER IF EXISTS users_expires;
DELIMITER $$
CREATE
TRIGGER users_expires BEFORE INSERT
ON users
FOR EACH ROW BEGIN
IF NEW.expires IS NULL
THEN
SET NEW.expires = NOW() + INTERVAL 1 YEAR;
END IF;
END$$
DELIMITER ;
<强>查询强>
INSERT INTO users (user_name) VALUES ('raymond nijland')
<强>结果强>
Query: INSERT INTO users (user_name) VALUES ('raymond nijland')
1 row(s) affected
<强>查询强>
SELECT * FROM users;
<强>结果强>
id user_name expires
------ --------------- ---------------------
1 raymond nijland 2018-11-06 18:50:16