Mysql Laravel:将默认时间戳设置为从现在起一年
我看到了一些关于如何使用current_timestamp将timestamp列的默认值设置为current datetime的线程。但是,我正在寻找如何将默认值设置为当前时间戳+1年 我试过了,但没有成功:Mysql Laravel:将默认时间戳设置为从现在起一年,mysql,laravel-5,Mysql,Laravel 5,我看到了一些关于如何使用current_timestamp将timestamp列的默认值设置为current datetime的线程。但是,我正在寻找如何将默认值设置为当前时间戳+1年 我试过了,但没有成功: Schema::table('users', function (Blueprint $table) { $table->timestamp('expires')->default(DB::raw('NOW() + INTERVAL 1 YEAR'))->afte
Schema::table('users', function (Blueprint $table) {
$table->timestamp('expires')->default(DB::raw('NOW() + INTERVAL 1 YEAR'))->after('updated_at');
});
收到此错误:
SQLSTATE[42000]:语法错误或访问冲突:1064您有
SQL语法错误;检查与您的产品相对应的手册
MySQL服务器版本,以便在“+间隔1”附近使用正确的语法
在第1行的'处更新后一年(SQL:alter tableusers
添加expires
timestamp not null default NOW()+间隔1年后
已更新_于
)
SQLSTATE[42000]:语法错误或访问冲突:1064您有
SQL语法错误;检查与您的产品相对应的手册
MySQL服务器版本,以便在“+间隔1”附近使用正确的语法
第1行更新后的第1年
您知道如何将此列的默认值设置为从当前日期算起的一年吗?您可以通过创建触发器让数据库处理这一切 创建表格/插入表格/创建触发器
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')
SELECT * FROM users;
结果
Query: INSERT INTO users (user_name) VALUES ('raymond nijland')
1 row(s) affected
id user_name expires
------ --------------- ---------------------
1 raymond nijland 2018-11-06 18:50:16
查询
INSERT INTO users (user_name) VALUES ('raymond nijland')
SELECT * FROM users;
结果
Query: INSERT INTO users (user_name) VALUES ('raymond nijland')
1 row(s) affected
id user_name expires
------ --------------- ---------------------
1 raymond nijland 2018-11-06 18:50:16
您可以通过创建触发器让数据库处理这一切 创建表格/插入表格/创建触发器
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')
SELECT * FROM users;
结果
Query: INSERT INTO users (user_name) VALUES ('raymond nijland')
1 row(s) affected
id user_name expires
------ --------------- ---------------------
1 raymond nijland 2018-11-06 18:50:16
查询
INSERT INTO users (user_name) VALUES ('raymond nijland')
SELECT * FROM users;
结果
Query: INSERT INTO users (user_name) VALUES ('raymond nijland')
1 row(s) affected
id user_name expires
------ --------------- ---------------------
1 raymond nijland 2018-11-06 18:50:16
用
PHP
处理这个问题会更好吗?插入新记录时,设置$newRecord->expires=\Carbon\Carbon::now()->addYears(1)代码>,作为一个简单的例子。@Timleis,这肯定是另一个选项-只是想知道是否有一种方法可以直接使用create语句设置默认值。在dafult value of timestamp字段中不能这样做-请在此处查看mysql文档:。您只能将默认值设置为当前时间戳,或者让它自动更新PHP
是否可以更好地处理此问题?插入新记录时,设置$newRecord->expires=\Carbon\Carbon::now()->addYears(1)代码>,作为一个简单的例子。@Timleis,这肯定是另一个选项-只是想知道是否有一种方法可以直接使用create语句设置默认值。在dafult value of timestamp字段中不能这样做-请在此处查看mysql文档:。您只能将默认值设置为当前时间戳或自动更新