Я много использовал sequelize в недавних проектах, и мне любопытно, что происходит под прикрытием ассоциаций против миграций.Например, когда я генерирую 2 модели:
user = {
id,
name,
}
и
post = {
id,
name,
}
, а затем я генерирую миграцию для добавления связанных столбцов:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
'posts',
'userId', // name of the key we're adding
{
type: Sequelize.UUID,
references: {
model: 'users', // name of Target model
key: 'id', // key in Target model that we're referencing
},
onUpdate: 'CASCADE',
onDelete: 'SET NULL',
}
);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
'posts', // name of Source model
'userId' // key we want to remove
);
}
};
чтометод associate
в модели делает, если миграция выше добавляет фактический столбец userId
в таблицу записей?
пример метода associate
в модели:
module.exports = (sequelize, DataTypes) => {
const post = sequelize.define('post', {
name: DataTypes.TEXT
}, {});
post.associate = function(models) {
post.belongsTo(models.user);
};
return post;
};
, который поднимает больший вопрос, если метод Associate заканчивает тем, что создает фактический столбец внешнего ключа в БД, является ли промежуточная миграция (подобная показанной выше, которая создает столбцы внешнего ключа) необходимой для создания столбца внешнего ключа?