2015-03-09 3 views
2

У меня есть модель sequelize для тура, который имеет начало и конец:Могу ли я проверить модель по отношению к другому свойству?

this.model = db.define('Tour', { 
    id: { 
     type: Sequelize.BIGINT(20), 
     allowNull: false, 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    from_time: { 
     type: Sequelize.DATE, 
     allowNull: true 
    }, 
    to_time: { 
     type: Sequelize.DATE, 
     allowNull: true 
    } 
} 

Как я могу убедиться, что to_time после from_time?

(я думаю validate можно использовать, но я не знаю, как)

+0

Я знаю, что существуют проверенные валидаторы 'isAfter' и' isBefore', но не знают, могут ли они использоваться для проверки других полей модели. – diosney

+0

Только что подтвержденные разработчиками secelize, способ сделать это с помощью специального валидатора, как указано в @alexpods. – diosney

+0

Только одно предостережение, если вы хотите сделать проверку на превышение количества, например 'start ​​start' (читать: одновременно проверять оба поля в каждом объявлении поля), возможно, пользовательский валидатор должен быть установлен на определение модели, так же как пример long & lat в документах. – diosney

ответ

2

this в validatar будет ссылаться на текущую модель. Так что это может быть написано так:

// ... 
to_time: { 
    type: Sequelize.DATE, 
    allowNull: true, 
    validate: { 
     isAfterFrom: function(toTime) { 
      if (this.fromTime > toTime) { 
       throw new Error('To time must be less then from time') 
      } 
     } 
    } 
}, 
// ... 
Смежные вопросы