Sequelize:模型未关联到 Model2

Posted

技术标签:

【中文标题】Sequelize:模型未关联到 Model2【英文标题】:Sequelize: Model is not associated to Model2 【发布时间】:2021-12-29 20:47:08 【问题描述】:

我正在尝试使用 Sequelize 中的几个模型进行查询。我有 2 个模型,一个是 Project,另一个是 Specification。一个项目可以有多个规范,一个规范只能属于一个项目。表结构为:

项目:

标题 说明 创建时间 更新时间

规格:

标题 说明 ProjectId(Projects 表中的外键)

这是我对规范的关系 -> 项目:

Project.belongsToMany(Specification);

我用来检索数据的函数就是这个。基本上它会获取所有数据,包括所有可能的关联

// Retrieve all Projects from the database.
exports.findAll = (req, res) => 
  Project.findAll(
  include: [
    all: true
  ]
)
.then(data => 
  res.send(data);
)
.catch(err => 
  res.status(500).send(
    message:
      err.message || "Some error occurred while retrieving projects."
  );
);
;

最后,我得到的错误是:

"message":"specification is not associated to project!"

有人可以帮助我或教我如何完成查询吗?我一直在尝试,但无法得到正确的结果。 谢谢!

【问题讨论】:

【参考方案1】:

如果你将你的结构描述为

一个项目可以有多个规范,一个规范只能属于一个项目

那么这是一个通常的 1:N 关系,在这种情况下,应该使用 hasMany 关联而不是 belongsToMany,因为 belongsToMany 用于指示 M:N 关系,在这种情况下,您将需要一个联结表/模型。 也就是说你只需要更换

Project.belongsToMany(Specification);

Project.hasMany(Specification,  foreignKey: 'ProjectId' );

我总是更喜欢明确指出外键

【讨论】:

【参考方案2】:

使用hasMany而不是belongsToMany来定义关系

Project.hasMany(Specification, 
  foreignKey:  name: 'ProjectId' ,
  targetKey: 'ProjectId',
  constraints: false,
  as: 'specifications',
),

【讨论】:

以上是关于Sequelize:模型未关联到 Model2的主要内容,如果未能解决你的问题,请参考以下文章

按关联模型排序时,Sequelize 抛出错误“无法找到模型 x 的有效关联”

Sequelize 模型关联不会创建新列

为啥 Sequelize 认为我的模型没有关联?

使用 sequelize 关联不同的模型?

Sequelize 关联模型查询

Sequelize - 在验证模型的关联时获取正确的路径