ılǝ*_*ılǝ 19 mysql datetime timestamp node.js sequelize.js
在我的node.js应用程序中,我有几个模型,我想在其中定义TIMESTAMP类型列,包括默认时间戳created_at和updated_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)
根据 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
就我而言,我创建如下所示的模型
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)