Sequelize'afterValidate'钩子不会改变值

时间:2017-01-16 15:36:16

标签: hook sequelize.js

我的续集钩子有问题。当我创建一个新实例时,以下代码可以很好地完成它的工作。但是,当涉及到更新现有数据库条目时,rec.working_time和rec.break_duration的值不会返回数据库

我可以看到通过添加一些控制台日志来调用钩子,并且rec值也会改变。但是somhow没有关于theese领域的更新。 如果我使用'beforeUpdate'做同样的事情,一切都可以使用相同的代码。

TimeRecording.hook('afterValidate', rec => {
    var moment = require('moment');
    var models = require('../models');

    let workingTime = moment(rec.time_to).diff(rec.time_from, 'minutes', null);
    let workingHours = workingTime / 60;

    return models.BreakControl.max('break_duration',
      {
        where: { working_time: { lt: workingHours } }
      })
      .then(breakControl => {
        breakControl = breakControl ? breakControl : 0;

        rec.working_time = workingTime - breakControl;
        rec.break_duration = breakControl;
      })
      .catch(err => console.error(err));
});

此处还有一个关于模型中重要属性的概述:

time_from: {
  type: DataTypes.DATE,
  allowNull: false,
},
time_to: {
  type: DataTypes.DATE,
  validate: {
    isAfter: function (value, next) {
      let self = this;
      if (self.time_from > value) {
        return next('time_to must be after time_from!');
      }
      return next();
    }
  }
},
required_time: {
  type: DataTypes.DECIMAL(4, 0)
},
working_time: {
  type: DataTypes.DECIMAL(4, 0),
  validate: {
    min: 0
  }
},
break_duration: {
  type: DataTypes.DECIMAL(4, 0)
}

我错过了什么,或者我在这里没有理解一些关键概念?

感谢您提供任何相关信息。

0 个答案:

没有答案