sequelize.js TIMESTAMP不是DATETIME

ılǝ*_*ılǝ 19 mysql datetime timestamp node.js sequelize.js

在我的node.js应用程序中,我有几个模型,我想在其中定义TIMESTAMP类型列,包括默认时间戳created_atupdated_at.

根据sequelize.js的文档,只有一种DATE数据类型.它DATETIME在MySQL中创建列.

例:

var User = sequelize.define('User', {
... // columns
last_login: {
            type: DataTypes.DATE,
            allowNull: false
        },
...
}, { // options
        timestamps: true
});
Run Code Online (Sandbox Code Playgroud)

是否可以生成TIMESTAMP列?

alu*_*cic 14

只需将'TIMESTAMP'字符串传递给您的类型即可

module.exports = {
  up: function (queryInterface, Sequelize) {
    return queryInterface.createTable('users', {
      id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
        created_at: {
        type: 'TIMESTAMP',
        defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
        allowNull: false
      },
      updated_at: {
        type: 'TIMESTAMP',
        defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
        allowNull: false
      }
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 这在续集 6 中不再有效,它会抛出错误,有人知道创建“时间戳”列而不是“日期时间”列的新方法吗? (3认同)

Nat*_*one 5

根据 Sequelize 文档,您可以设置 Sequelize.NOW 的 defaultValue 来创建时间戳字段。这具有效果,但依赖于 Sequelize 来实际填充时间戳。它不会在表上创建“CURRENT_TIMESTAMP”属性。

var Foo = sequelize.define('Foo', {
    // default values for dates => current time
    myDate: { 
         type: Sequelize.DATE, 
         defaultValue: Sequelize.NOW 
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,这确实实现了拥有时间戳字段的最终目标,但它是通过 Sequelize 控制的,而不是通过实际的数据库引擎控制的。

它似乎也适用于没有时间戳功能的数据库,因此这可能是一个好处。

参考网址: http://sequelize.readthedocs.org/en/latest/docs/models-definition/#definition


Ren*_*cha 5

就我而言,我创建如下所示的模型

module.exports = (sequelize, type) => {
    return sequelize.define('blog', {
        blogId: {
          type: type.INTEGER,
          primaryKey: true,
          autoIncrement: true
        },
        text: type.STRING,
        createdAt:{
            type: 'TIMESTAMP',
            defaultValue: sequelize.literal('CURRENT_TIMESTAMP'),
            allowNull: false
        },
        updatedAt:{
            type: 'TIMESTAMP',
            defaultValue: sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
            allowNull: false
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述