我是续集和postgresql的新手。我花了很多时间来寻找这个问题的答案,但找不到与它有关的任何东西。如果这个问题在另一篇文章中有答案,我很抱歉重复,我很乐意参考另一篇文章,并从这里删除我的文章。
一开始我就做过:
Suspense
其中collection_id引用另一个表ID。我对收集表做了同样的事情:
sequelize model:generate --name user --attributes username:string,email:string,password:string,collection_id:INTEGER
在我的模型中,我更新了关联 在我添加的收集模型中:
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'})
在各自的文件中。现在的问题是,sequelize尝试在收集模型之前迁移用户模型,但是在第一个模型中引用了后者,而我得到的错误“关系“收集”不存在”这才是有意义的。现在,如果我删除了引用,是否可以在迁移后稍后添加它?
答案 0 :(得分:0)
reference
在引擎盖下的表上设置外键。但是您不能有2个表彼此指向外键(循环引用)。
您在“子”表上设置了指向“父”表的外键。就您而言,如果collection
属于user
,则collection
是“子”。
您可以阅读此paragraph from Sequalize docs,其中包含有关hasOne
和belongsTo
之间的区别的一些详细信息(并分别阅读Sequalize中的那些关联)。实际上,您传递给{foreignKey: 'collection_id'}
方法的hasOne
应该在collections
表中( target 模型),这意味着在您的情况下这没有意义,并且应该是这样的:
models.user.hasOne(models.collection, {foreignKey: 'user_id'})
因此,您不需要collection_id
表中的user
列,就可以安全地删除它。