案例 1:数据库初始化
如果您的目的是在数据库结构初始化期间添加关系,最好只使用sync 方法而不是使用迁移手动添加它们。如果您的模型设计正确并定义了关系,它们将在执行sync 方法期间自动创建。
看看sequelize express example。在模型目录中,您有三个文件:
-
index.js - 包括所有型号
-
task.js - 任务模型
-
user.js - 用户模型
查看task.js 内容,从第 7 行开始,以下代码创建了 User 和 Task 模型之间的关系:
classMethods: {
associate: function(models) {
Task.belongsTo(models.User, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
如果您在模型文件中正确准备了关系,同步将为您创建外键。在这种情况下不需要迁移。
我鼓励您阅读整个 express-example readme.md 并浏览存储库文件以了解这些内容如何与 express 和 sequelize 一起使用。
案例2:数据库结构迁移
如果您已经有一些想要保留的数据,则需要使用迁移脚本,因为同步重构数据库的唯一方法是将其与所有数据一起完全销毁。
您可以阅读基本的migrations in the sequelize docs。不幸的是,文档不包括创建关系。假设您要创建以下关系:用户属于组。要在关系的用户端创建列,您可以使用addColumn 方法。
queryInterface.addColumn(
'user',
'group_id',
{
type: Sequelize.INTEGER,
allowNull: true
}
)
不幸的是,还没有一个很好的函数来为您创建外键约束,但您可以使用 sequelize 查询方法手动完成。 Postgresql 示例:
queryInterface.sequelize.query("ALTER TABLE user
ADD CONSTRAINT user_group_id_fkey FOREIGN KEY (group_id)
REFERENCES group (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE;");
编辑:添加数据库结构迁移案例