gpt4 book ai didi

node.js - 引用尚未创建的模型,避免错误 : relation "TABLENAME" does not exist

转载 作者:行者123 更新时间:2023-11-29 13:39:38 26 4
gpt4 key购买 nike

我对 sequelize 和 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 是“child”。

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

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

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

关于node.js - 引用尚未创建的模型,避免错误 : relation "TABLENAME" does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234229/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com