sequelize hook 设置自定义字段不生效
如题,koa使用了sequelize数据库orm,定义好模型后,也定义了一个hook,来设置自定义的时间戳字段;
数据可以正常添加,更新;
问题:在添加的时候,创建时间 和 更新时间会报道数据库,但是更新操作 创建时间 和 更新时间 就不会自动更新,很奇怪,不知道为什么。
定义好的模型:
module.exports = (app) => {
const { sequelize, Sequelize } = app;
const fields = {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
primaryKey: true,
unique: true,
},
name: {
type: Sequelize.STRING(16),
allowNull: false,
comment: '名称',
},
createdAt: {
type: Sequelize.STRING(15),
defaultValue: Date.now(),
comment: '创建时间',
},
updatedAt: {
type: Sequelize.STRING(15),
defaultValue: Date.now(),
comment: '更新时间',
},
};
const config = {
timestamps: false,
hooks: {
beforeValidate(obj) {
let now = Date.now();
// 如果id存在说明是更新操作
if (obj.dataValues.id) {
// 这里没有执行,数据库也未更新
obj.updatedAt = now;
} else {
obj.createdAt = now;
obj.updatedAt = now;
}
},
},
};
return sequelize.define('tem', fields, config);
};
添加操作
this.models.tem.create(data)
更新操作
this.models.tem.update(data)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
查看了官方文档,isNewRecord 不代表是否是添加和修改的标识。如果想在修改或增加前做动作,要写下面两个钩子:
有一点需要注意:必须要设置individualHooks: true