sequelize.js TIMESTAMP不是DATETIME

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

根据sequelize.js的文档 ,只有一个DATE数据types。 它在MySQL中创buildDATETIME列。

例:

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

是否有可能生成TIMESTAMP列呢?

只要传入'TIMESTAMP'string到你的types

 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 } }); } }; 

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

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

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

它也似乎在没有时间戳function的数据库上工作,所以这可能是一个好处。

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

我用sqLite做的是扩展DataTypes与我自定义SQL逻辑的TIMESTAMP ,它工作正常。 我不是100%确定SQL语法应该如何查找MySQL,但我猜这是类似于我的东西。 看例子:

 function (sequelize, DataTypes) { var util = require('util'); var timestampSqlFunc = function () { var defaultSql = 'DATETIME DEFAULT CURRENT_TIMESTAMP'; if (this._options && this._options.notNull) { defaultSql += ' NOT NULL'; } if (this._options && this._options.onUpdate) { // onUpdate logic here: } return defaultSql; }; DataTypes.TIMESTAMP = function (options) { this._options = options; var date = new DataTypes.DATE(); date.toSql = timestampSqlFunc.bind(this); if (!(this instanceof DataTypes.DATE)) return date; DataTypes.DATE.apply(this, arguments); }; util.inherits(DataTypes.TIMESTAMP, DataTypes.DATE); DataTypes.TIMESTAMP.prototype.toSql = timestampSqlFunc; var table = sequelize.define("table", { /* table fields */ createdAt: DataTypes.TIMESTAMP, updatedAt: DataTypes.TIMESTAMP({ onUpdate: true, notNull: true }) }, { timestamps: false }); }; 

你只需要在timestampSqlFunc函数中更改SQLtypes的生成,例如defaultSqlvariables就是'TIMESTAMP DEFAULT CURRENT_TIMESTAMP'