【发布时间】:2019-09-18 00:22:16
【问题描述】:
我在最近的项目中经常使用 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
);
}
};
如果上面的迁移将实际的userId 列添加到posts 表中,模型中的associate 方法会做什么?
模型中associate 方法的示例:
module.exports = (sequelize, DataTypes) => {
const post = sequelize.define('post', {
name: DataTypes.TEXT
}, {});
post.associate = function(models) {
post.belongsTo(models.user);
};
return post;
};
这提出了一个更大的问题,如果 associate 方法最终在 db 中创建实际的外键列,那么是创建外键列所必需的中间迁移(如上所示,它创建外键列) ?
【问题讨论】:
标签: javascript orm sequelize.js