我对续集和postgresql很陌生。我寻找了很多这个问题的答案,但我找不到与我有关的任何内容。如果这个问题在另一篇文章中有答案,我很抱歉重复,我很乐意参考另一篇帖子并从这里删除我的帖子。
一开始我做到了:
sequelize model:generate --name user --attributes username:string,email:string,password:string,collection_id:INTEGER
其中collection_id引用另一个表 ID。我对收集表做了同样的事情:
sequelize model:generate --name collection --attributes plant_id:integer,user_id:integer
在我的模型中,我更新了关联在集合模型中,我添加了:
models.collection.belongsTo(models.user, {foreignKey: 'user_id'})
在用户模型中,我添加了:
models.user.hasOne(models.collection, {foreignKey: 'collection_id'})
在我添加的迁移文件中:
user_id: {
type: Sequelize.INTEGER,
references: {
model: {
tableName: 'user'
}
}
}
collection_id: {
type: Sequelize.INTEGER,
references: {
model: {
tableName: 'collection'
}
}
}
在各自的文件中。现在这里的问题是 sequelize 试图在集合模型之前迁移用户模型,但是后者在第一个模型中被引用,我收到此错误"关系"集合"不存在",这才有意义。现在,如果我删除了引用,有没有办法在迁移后添加它?
reference
在引擎盖下的桌子上设置一个外键。但是您不能有 2 个外键相互指向的表(循环引用(。
在指向"父"表的"子"表上设置外键。在您的情况下,如果collection
属于user
那么collection
就是"孩子"。
您可以从 Sequalize 文档中阅读这一段,其中包含有关 hasOne
和 belongsTo
之间区别的一些详细信息(也可以单独阅读 Sequalize 中的这些关联(。 您传递给hasOne
方法{foreignKey: 'collection_id'}
实际上应该在表(目标模型(collections
,这意味着在您的情况下它没有意义,应该如下所示:
models.user.hasOne(models.collection, {foreignKey: 'user_id'})
因此,您不需要user
表中collection_id
列,可以安全地将其删除。