Sequelize пользовательская проверка - невозможно получить доступ ко всем полям в сущности - PullRequest
0 голосов
/ 22 декабря 2018

Я попытался создать модель в sequelize (скажем, имеет 3 атрибута, attrA, B и C) с некоторой пользовательской логикой проверки. Этот учебник помог мне настроить большую часть его:

const Model = Sequelize.define('model', {
  attrA: { type: Sequelize.STRING },
  attrB: { type: Sequelize.STRING },
  attrC: { type: Sequelize.STRING },
}, {
  validate: {
    someValidationLogic() {
       // Do something with attrA,B,C
       // if (this.attrA ... this.attrB ... this.attrC) throw new Error..
    }
  }
})

Однако в логике приложения, скажем, только 2 из 3 атрибутов (A и B) необходимо обновить:

Model.update(
  {
    attrA: 'foo', 
    attrB: 'bar'
  }, {
  where: {
      id: 1,
  },
  returning: true,
})

Это приводит к тому, что при вызове пользовательской логики проверки в объекте this, доступном в функции, только attrA и attrB определяются в this и attrCосталось неопределенным.Это приводит к сбою логики проверки, так как attrC не может быть прочитан.Можно ли как-нибудь получить видимый объект из someValidationLogic(), чтобы заполнить все атрибуты?Или эта «проверка» вообще не должна была быть логикой проверки и должна была проводиться на уровне приложения?

1 Ответ

0 голосов
/ 23 декабря 2018

Ваша логика валидации может учитывать возможность того, что attrC не определено:

validate: {
    someValidationLogic() {
        if (this.attrA !== 'undefined' && this.attrA === 'forbidden value' ) {
            // throw new Error
        }     
    }
}

Но если ваша валидация включает проверку предоставленных значений по текущим значениям базы данных, то вам лучше обработать это вприкладной уровень: сначала восстановите текущую запись в базе данных, при необходимости измените ее, а затем сохраните в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...