Sequelize.js 对外键目标与源进行续集
我使用sequelize已经有一段时间了,但从未真正了解过Sequelize.js 对外键目标与源进行续集,sequelize.js,Sequelize.js,我使用sequelize已经有一段时间了,但从未真正了解过foreignKey的实际工作原理。他们在文件中声明: 目标键是源模型上的外键列指向的目标模型上的列 那么在以下情况下,目标是谁 Route.belongsTo(models.Subarea, { foreignKey: 'subareaId', as: 'subarea', }); Route.belongsToMany(models.Book, { through: mod
foreignKey
的实际工作原理。他们在文件中声明:
目标键是源模型上的外键列指向的目标模型上的列
那么在以下情况下,目标是谁
Route.belongsTo(models.Subarea, {
foreignKey: 'subareaId',
as: 'subarea',
});
Route.belongsToMany(models.Book, {
through: models.BookRoute,
foreignKey: 'routeId',
as: 'books',
});
我的困惑在于,为什么在第一种情况下,我把foreignKey放在subreaid上,而在第二种情况下,我把它放在routeId上。如果两种情况下都不是routeId,那么foreignKey应该是sourceId吗?我建议按以下步骤进行推理:
hasOne
和hasMany
将fk放在目标位置belongsTo
将fk置于源代码上BelongToMany
通过模型将fk置于上李>
hasOne
和hasMany
将参考源模型;对于以下内容,请参考目标模型;对于belongstomy
源模型的引用(您可以使用otherKey:
引用目标模型)李>
belongtomany
是一种特殊情况,因为引入了第三种模型:直通模型(或联接表),在该模型上存储源和目标的外键。这在某种程度上改变了外键的“透视图”,因此,在外键引用方面,您无法将其与belongsTo
进行完全比较
因此,回答您的问题:
- 目标是哪一个?分别是分区和书本
- 使用哪个外键?:您的外键与上面的一致
解释
BelongToMany
作为外键是例外的
既不存储在源上也不存储在目标上,而是存储在直通模型上