使用SequelizeJS使用外键编写迁移 [英] Writing Migrations with Foreign Keys Using SequelizeJS
本文介绍了使用SequelizeJS使用外键编写迁移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
背景
我正在使用SequelizeJS构建一个项目,SequelizeJS是一种流行的NodeJS ORM。在设计架构时,似乎有两种策略:
- 创建模型代码并使用.sync()函数自动为您的模型生成表。
- 创建模型代码并使用QueryInterface和umzug编写manual migrations。
我的理解是,#1更适合快速原型制作,但#2是预期会随时间发展的项目的最佳实践,并且生产数据需要能够经受住迁移。
此问题与策略2有关。
问题
我的表具有必须通过外键反映的关系。
如何通过Sequelize QueryInterface创建彼此具有外键关系的表?
序列化需要哪些列和帮助器表?例如,似乎需要特定的列,如createdAt或updatedAt。
推荐答案
如何通过Sequelize QueryInterface创建彼此具有外键关系的表?
.createTable()
方法接受列的字典。您可以查看documentation for .define()
中的有效属性列表,特别是通过查看params表中的[attributes.column.*]
行。
若要创建具有外键关系的属性,请使用&Quot;References&Quot;和&Quot;ReferencesKey&Quot;字段:
例如,下面将创建一个users
表和一个引用USERS表的user_emails
表。
queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}
}).then(function() {
queryInterface.createTable('user_emails', {
userId: {
type: Sequelize.INTEGER,
references: { model: 'users', key: 'id' }
}
})
});
序列化需要哪些列和帮助器表?例如,似乎需要特定的列,如createdAt或updatedAt。
标准模型似乎预期每个表有一个id
、updatedAt
和createdAt
列。
queryInterface.createTable('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
createdAt: {
type: Sequelize.DATE
},
updatedAt: {
type: Sequelize.DATE
}
}
如果在模型上设置paranoid
to true
,还需要deletedAt
时间戳。
这篇关于使用SequelizeJS使用外键编写迁移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文