Sequelize:模型未关联到 Model2
Sequelize: Model is not associated to Model2
我正在尝试使用 Sequelize 中的几个模型进行查询。我有 2 个模型,一个是 Project,另一个是 Specification。一个项目可以有多个Specification,一个specification只能属于一个项目。 table结构是:
项目:
- 标题
- 描述
- 创建时间
- 更新时间
规格:
- 标题
- 描述
- ProjectId(来自项目 table 的外键)
这是我对规范 -> 项目的关系:
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!"}
有人可以帮助我或教我如何完成查询吗?我一直在努力,但无法得到正确的结果。
谢谢!
如果您将结构描述为
A project can have many Specifications, and a specification can only belong to one project
那么这是一个通常的1:N关系,在这种情况下,应该使用hasMany
关联而不是belongsToMany
,因为belongsToMany
用于表示M:N 关系,在这种情况下,您将需要一个连接点 table/model。
那就是说你只需要更换
Project.belongsToMany(Specification);
和
Project.hasMany(Specification, { foreignKey: 'ProjectId' });
我总是更喜欢显式指示外键
使用hasMany
而不是belongsToMany
来定义关系
Project.hasMany(Specification, {
foreignKey: { name: 'ProjectId' },
targetKey: 'ProjectId',
constraints: false,
as: 'specifications',
}),
我正在尝试使用 Sequelize 中的几个模型进行查询。我有 2 个模型,一个是 Project,另一个是 Specification。一个项目可以有多个Specification,一个specification只能属于一个项目。 table结构是:
项目:
- 标题
- 描述
- 创建时间
- 更新时间
规格:
- 标题
- 描述
- ProjectId(来自项目 table 的外键)
这是我对规范 -> 项目的关系:
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!"}
有人可以帮助我或教我如何完成查询吗?我一直在努力,但无法得到正确的结果。 谢谢!
如果您将结构描述为
A project can have many Specifications, and a specification can only belong to one project
那么这是一个通常的1:N关系,在这种情况下,应该使用hasMany
关联而不是belongsToMany
,因为belongsToMany
用于表示M:N 关系,在这种情况下,您将需要一个连接点 table/model。
那就是说你只需要更换
Project.belongsToMany(Specification);
和
Project.hasMany(Specification, { foreignKey: 'ProjectId' });
我总是更喜欢显式指示外键
使用hasMany
而不是belongsToMany
来定义关系
Project.hasMany(Specification, {
foreignKey: { name: 'ProjectId' },
targetKey: 'ProjectId',
constraints: false,
as: 'specifications',
}),