引用尚未创建的模型,请避免出现以下错误:关系“ TABLENAME”不存在

时间:2019-07-27 16:53:24

标签: node.js postgresql sequelize.js

我是续集和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尝试在收集模型之前迁移用户模型,但是在第一个模型中引用了后者,而我得到的错误“关系“收集”不存在”这才是有意义的。现在,如果我删除了引用,是否可以在迁移后稍后添加它?

1 个答案:

答案 0 :(得分:0)

reference在引擎盖下的表上设置外键。但是您不能有2个表彼此指向外键(循环引用)。

您在“子”表上设置了指向“父”表的外键。就您而言,如果collection属于user,则collection是“子”。

您可以阅读此paragraph from Sequalize docs,其中包含有关hasOnebelongsTo之间的区别的一些详细信息(并分别阅读Sequalize中的那些关联)。实际上,您传递给{foreignKey: 'collection_id'}方法的hasOne应该在collections表中( target 模型),这意味着在您的情况下这没有意义,并且应该是这样的:

models.user.hasOne(models.collection, {foreignKey: 'user_id'})

因此,您不需要collection_id表中的user列,就可以安全地删除它。