#sequelize.js #camelcasing #snakecasing
#sequelize.js #camelcasing #snakecasing
Вопрос:
Используя Sequelize 6, у меня есть модель, связанная с таблицами, которая имеет заглавные буквы в одних столбцах и регистр змеи в других (столбцы не являются created_at или updated_at).
Подчеркнутая конфигурация модели, по-видимому, влияет на каждый атрибут, связанный с соответствующими столбцами таблицы. Есть ли способ переопределить конфигурацию с подчеркиванием на уровне модели, чтобы атрибут, связанный со столбцом таблицы, сохранял исходное имя столбца таблицы?
Пример кода:
const someModel = sequelize.define('some_table', {
'id': {
type: dataTypes.BIGINT,
primaryKey: true,
autoIncrement: true,
},
'other_table_id': {
type: dataTypes.BIGINT,
allowNull: false,
references: {
model: 'other_table',
key: 'id',
deferrable: INITIALLY_IMMEDIATE,
},
},
'CAPITAL_letterColumn': {
type: dataTypes.STRING,
allowNull: true,
defaultValue: null,,
}
}, {
timestamps: false,
paranoid: false,
// underscored: true, // true === snake case, false === camelcase
}
});
someModel.associate = (models) => {
someModel.belongsTo(models.other_table, { foreignKey: 'other_table_id', targetKey: 'id' });
};
Я получаю следующую ошибку:
UnhandledPromiseRejectionWarning: SequelizeDatabaseError: column "otherTableId" does not exist
Если я установлю
underscored: true
Я получаю следующую ошибку:
UnhandledPromiseRejectionWarning: SequelizeDatabaseError: column "c_a_p_i_t_a_l_letter_column" of relation "some_table" does not exist
Ответ №1:
Похоже, добавление атрибута field в определение модели устраняет проблему.
'other_table_id': {
field: 'other_table_id', // <-- this line
type: dataTypes.BIGINT,
allowNull: false,
references: {
model: 'other_table',
key: 'id',
deferrable: INITIALLY_IMMEDIATE,
},
},