Mysql Laravel:将默认时间戳设置为从现在起一年

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

我看到了一些关于如何使用current_timestamp将timestamp列的默认值设置为current datetime的线程。但是,我正在寻找如何将默认值设置为当前时间戳+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服务器版本,以便在“+间隔1”附近使用正确的语法 在第1行的'处更新后一年(SQL:alter table
users
添加
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文档:。您只能将默认值设置为当前时间戳或自动更新