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

时间:2017-11-06 17:31:33

标签: mysql laravel-5

我已经看到了一些关于如何使用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 table users   添加expires时间戳不为空默认NOW()+ INTERVAL 1年后   updated_at

     

SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,在'+ INTERVAL 1附近使用正确的语法   在第1行的updated_at'之后的年份

有关如何将此列的默认值设置为距当前日期一年的任何想法吗?

1 个答案:

答案 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