我的续集钩子有问题。当我创建一个新实例时,以下代码可以很好地完成它的工作。但是,当涉及到更新现有数据库条目时,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)
}
我错过了什么,或者我在这里没有理解一些关键概念?
感谢您提供任何相关信息。