loi*_*cs2 17 associations database-migration node.js sequelize.js
我的应用程序当前使用Sequelize sync()
方法来创建数据库,我想将其更改为使用迁移系统.
我的一个模型belongsTo()
与其他模型有关联,我真的不知道如何为这些关联制作初始迁移代码.
我是否必须使用SQL查询手动创建外键,或者是否有一些方法可用?
ezp*_*zpn 14
案例1:数据库初始化
如果您的目的是在数据库结构初始化期间添加关系,最好只使用sync
方法而不是使用迁移手动添加它们.如果您的模型设计合理且定义了关系,则会在执行sync
方法时自动创建它们.
看看sequelize express示例.在models目录中,您有三个文件:
index.js
- 包括所有型号task.js
- 任务模型user.js
- 用户模型查看task.js
内容,从第7行开始,以下代码在User和Task模型之间创建关系:
classMethods: {
associate: function(models) {
Task.belongsTo(models.User, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在模型文件中正确准备关系,则sync将为您创建外键.在这种情况下,迁移不是必需的.
我鼓励您阅读整个快速示例readme.md
并浏览存储库文件,以了解这些内容如何使用express和sequelize.
案例2:数据库结构迁移
如果您已经拥有一些要保留的数据,则需要使用迁移脚本,因为同步重构数据库的唯一方法是将其与所有数据一起完全销毁.
您可以在续集文档中阅读有关基本迁移的内容.不幸的是,文档不包括创建关系.假设您要创建以下关系:用户属于组.要在关系的用户端创建列,您可以使用addColumn
方法.
queryInterface.addColumn(
'user',
'group_id',
{
type: Sequelize.INTEGER,
allowNull: true
}
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,还没有一个很好的功能(还)为你创建外键约束,但你可以使用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;");
Run Code Online (Sandbox Code Playgroud)
编辑:添加了数据库结构迁移案例
小智 6
将其添加为答案,而不是上面@ aryeh-armon答案的注释(代表不足够)。需要确保表名称而不是模型名称。即,如果您的模型名为Job,而数据库表名为Jobs,则迁移将看起来像这样。
jobId: {
type: Sequelize.INTEGER,
references: {
model: "Jobs",
key: "id"
}
},
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11721 次 |
最近记录: |