经过一些研究(使用不同方法观察数据库更改)、反复试验后,我发现仅使用 references 选项无法添加可配置约束(例如指定 onDelete 操作)。
所以看来实现关联的正确方法如下:
(注:不使用sequelize.sync)
- 使用迁移创建
table1
- 使用迁移创建
table2 - 不指定 references 选项
- 在
table2 的迁移(创建)文件中添加以下代码(进行必要的更改)以添加外键约束
await queryInterface.addConstraint('tableName', {
fields: ['some-table2-field'],
type: 'foreign key',
references: {
table: 'table1',
field: 'table1Field',
},
onDelete: 'cascade',
onUpdate: 'no action',
});
- 按照通常的做法在 table1 和 table2 模型中定义关联,例如。
// table1.model.js
table1.hasMany(models.table2, {
foreignKey: 'name-of-the-key',
onDelete: 'cascade',
onUpdate: 'no action',
});
// table2.model.js
table2.belongsTo(models.table1, {
foreignKey: 'name-of-the-key',
onDelete: 'cascade',
onUpdate: 'no action',
});
所以要回答我的问题 1-3:在使用 sequelize.sync 上的迁移时,您实际上不需要使用 references,而 4: 如上所述。
如果其他人有更好或更正确的方法,欢迎回答和cmet。