我坚持使用sequelize hooks,试图将模型的每个更改写入日志表。因此,我正在寻找一种在写入MySQL之前和之后访问模型数据的方法。
如何在更新后的Sequelize Hook中访问此数据?
如何获取更新/更改/脏字段?
如何在更新之前和之后访问数据以制作差异?
答案 0 :(得分:3)
Hook函数的第一个参数是实例。只要在更新操作之前获取实例,instance._previousDataValues
和instance._change
就可用。
sequelize.addHook(
"afterCreate",
(i) => {
console.log(i);
}
);
答案 1 :(得分:0)
module.exports = (sequelize, DataTypes) => {
const ContractLineItem = sequelize.define('ContractLineItem', {
id: {
type: DataTypes.INTEGER,
field: 'id',
allowNull: false,
primaryKey: true,
autoIncrement: true
}
//more attributes here
}, {
schema: 'public',
tableName: 'ContractLineItem',
timestamps: true
});
ContractLineItem.beforeBulkUpdate((contractLineItem, options) => {
console.log("b4 update contractLineItem....contractLineItem._change =" + contractLineItem._change);
if (!contractLineItem._change){
console.log("nothing changed.............");
//skip updating record
//return next();
}else{
console.log("something changed................");
//update record
}
console.log("after checking on change....");
});
ContractLineItem.associate = (models) => {
ContractLineItem.belongsTo(models.Contract, {
foreignKey: 'contractId',
});
//more relationships
};
return ContractLineItem;
};
答案 2 :(得分:0)
在对象更新前后使用instance.dataValues
和instance._previousDataValues
访问值。这对钩子有效,对批量钩子无效。取自Sequelize Hooks- Previous data values for afterBulkUpdate