引用尚未创建的模型,请避免错误:关系"TABLENAME"不存在



我对续集和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 文档中阅读这一段,其中包含有关 hasOnebelongsTo 之间区别的一些详细信息(也可以单独阅读 Sequalize 中的这些关联(。 您传递给hasOne方法{foreignKey: 'collection_id'}实际上应该在表(目标模型(collections,这意味着在您的情况下它没有意义,应该如下所示:

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

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

最新更新