保存前的Sequelize计算值

时间:2015-03-21 13:08:18

标签: sequelize.js

我想计算保存模型前的小时数差异。我已经尝试过beforeUpdate(以及其他钩子),但该字段从未计算过。我也尝试过set:选项,但这也不起作用。

我需要字段'started_at'和'ended_at'。如果ended_at不为null,则计算差异并保存到字段小时。

我试过了:

hours: {
      type: DataTypes.DECIMAL(10,2),
      allowNull: true,
      set: function(){
        var duration = 0;
        if(this.ended_at){
          var Start = moment(this.started_at);
          var End = moment(this.ended_at);
          duration = End.diff(Start, 'hours', true);   
        }
        this.setDataValue('hours', duration);
      }
    },

我试过了:

beforeCreate: function(travel_log, options, fn){
        if(travel_log.ended_at){
          var Start = moment(travel_log.started_at);
          var End = moment(travel_log.ended_at);
          travel_log.hours = End.diff(Start, 'hours', true);
        }
        fn(null, travel_log)
      },

没有任何成功。文档也没有用。有人可以帮忙吗? THX

2 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,我不确定你想要什么,但是你可以创建一个实例,改变实例的变量。例如,如果您有模型任务:

var task = Task.build();
task.hours = CalcHoursExample();
task.save();

希望这有帮助

答案 1 :(得分:0)

需要InstanceMethods ......

instanceMethods: {
      calcHours: function(started_at,ended_at){
        var duration = 0;
        if(ended_at){
          var Start = moment(started_at);
          var End = moment(ended_at);
          var duration = End.diff(Start, 'hours', true);

        }
        return duration;
      }
    },

所以在钩子中:

beforeCreate: function(travel_log, options, fn){
        travel_log.hours = travel_log.calcHours(travel_log.started_at,travel_log.ended_at);
        fn(null, travel_log)
      },