【问题标题】:Laravel: set default timestamp to one year from nowLaravel:将默认时间戳设置为一年后
【发布时间】: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 table users 添加expires timestamp not null 默认NOW() + INTERVAL 1 YEAR after updated_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。您只能将默认设置为当前时间戳或自动更新

标签: mysql laravel-5


【解决方案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')

结果

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多