У меня есть следующее определение модели, созданное для sequelize.js:
const Item = sequelize.define('item', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
lender: {
type: Sequelize.STRING,
allowNull: false,
defaultValue() {
return this.getDataValue('owner');
}
},
owner: {
type: Sequelize.STRING,
allowNull: false,
},
},
{
tableName: 'items',
underscored: true,
updatedAt: false,
createdAt: 'timestamp'
}
);
Мое намерение состоит в том, что если поле кредитора lender
не указано, то оно устанавливается в поле owner
.
Когда я запускаю свой модульный тест, я получаю результат TypeError: this.getDataValue() is not a function
.
Документация показывает пример того, что defaultValue
является функцией. Что я здесь делаю не так?
Я использую sequelize 4.37 и PostgreSQL
@AbhinavD Я так много почерпнул из ошибки. Итак, как мне получить значение другого поля и сделать его значением по умолчанию для этого?
Извини за это. AFAIK, sequelize не поддерживает это. Конечно, вы можете добавить эту проверку во время создания объекта на уровне приложения.
Вы можете установить defaultValue для каждого ключа, но это используется только для создания / выборки значения этого конкретного столбца. Однако, если вы хотите получить значение другого столбца, если желаемое значение столбца равно нулю, вы можете использовать хуки.
Вы можете применить хуки при поиске, и всякий раз, когда значение вашего столбца равно нулю, он заполнит свое значение альтернативным значением столбца.
this
- это не текущий объект, который вы создаете. Отсюда ошибка