Sequelize hook afterUpdate如何获取脏字段,原始值和更新值?

时间:2017-01-22 13:31:57

标签: mysql node.js sequelize.js

我坚持使用sequelize hooks,试图将模型的每个更改写入日志表。因此,我正在寻找一种在写入MySQL之前和之后访问模型数据的方法。

如何在更新后的Sequelize Hook中访问此数据?

如何获取更新/更改/脏字段?

如何在更新之前和之后访问数据以制作差异?

3 个答案:

答案 0 :(得分:3)

Hook函数的第一个参数是实例。只要在更新操作之前获取实例,instance._previousDataValuesinstance._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.dataValuesinstance._previousDataValues访问值。这对钩子有效,对批量钩子无效。取自Sequelize Hooks- Previous data values for afterBulkUpdate