2015-03-21 4 views
1

Я хочу рассчитать разницу в часах перед сохранением модели. Я пробовал beforeUpdate (и другие крючки), но поле никогда не вычисляется. Я также попробовал параметр set:, но это тоже не работает.Зафиксировать значение вычисления перед сохранением

У меня есть поля 'begin_at' и 'finished_at'. Если end_at не является нулевым, тогда выведите разницу и сохраните в полевые часы.

Я пробовал:

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

+0

Не уверен, если я понял, что вы сомневаетесь, но вы можете создать пользовательский экземпляр, и вы измените его модель, а затем сохраните. [building-a-non-persistent-instance] (http://sequelize.readthedocs.org/en/latest/docs/instances/#building-a-non-persistent-instance) – dege

+0

Я бы хотел, чтобы модель всегда вычисляла разность end_at и start_at, а затем сохранить его в модели (db). – Tino

ответ

0

Как я упоминаю в комментарии, я не уверен, что вы хотите, но вы можете создать экземпляр, изменить переменные экземпляра. Например, если у вас есть модель задача:

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

Надеется, что это помогает

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) 
     }, 
Смежные вопросы