如何在从父表到chlid的续集中使用"include"(如果这两个表之间存在多个关系)



问题我们有两个表(Project,user(,它们有两个关系(assignee,created by(问题是在使用include获取数据时,我无法区分这两种关系。

当我使用include-sequelize时,它通过关系创建的包括User表,但我们想要的是,它应该通过assignee的关系包括User表。这样我们就可以获得项目分配给的所有用户。

目标是

从分配给给定项目的用户表中获取项目详细信息以及所有具有详细信息(id,user_name(的用户

场景有关表的更多详细信息

我们有两个由以下代码生成的表(Project、user(。

对于项目

const Project = sequelize.define('project', {
id: {
type: DataTypes.BIGINT,
autoIncrement: true,
primaryKey: true
},
project_title :DataTypes.STRING,
creator_id :DataTypes.INTEGER
}

对于用户表格

const User = sequelize.define('user', {
id: {
type: DataTypes.BIGINT,
autoIncrement: true,
primaryKey: true
},
user_name:DataTypes.STRING,
}

那么我们在上面两个表之间有两个关系(受让人,由创建(

  1. 受让人(多对多(-一个项目可以分配给多个用户,一个用户可以有多个项目。此关系是由以下代码通过透视表(UserProject(建立的
User.belongsToMany(Project, { through: "UserProject" ,foreignKey:"user_id"});
Project.belongsToMany(User, { through: "UserProject" ,foreignKey:"project_id"});
  1. 由(一对多(创建-一个用户可以创建多个项目,下面是用于建立关系的代码
User.hasMany(Project, { foreignKey : 'creator_id', sourceKey: 'id' });
Project.belongsTo(models.user, { foreignKey : 'creator_id', targetKey: 'id' });

**在表中插入数据后**-

User                   Project                                UserProject
id | user_name     id | project_title | creator_id        id  | project_id  | user_id
1  | Lokesh         1 |     HKMS      |     2              1  |      1      |    1   
2  | Rahul                                                 2  |      1      |    3   
3  | Mohit

(提供给定项目的project_id(

获取数据的我的代码

const options = { 
where: { id: project_id },
include:{
model: User
} 
}
const viewProject = await Project.findAll(options)
console.log(viewProject)

输出

{
"data": [
{
"id": 1,
"project_title": "HKMS",
"creator_id": 2,
"user": {
"id" : 2,
"name": "Rahul"
}
}
]
}

所需输出

{
"data": [
{
"id": 1,
"project_title": "HKMS",
"creator_id": 2,
"users":[
{
"id" : 1,
"name": "Lokesh"
},
{
"id" : 3,
"name": "Mohit"
}
]
}
]
}

我是新的续集请帮助解决这个谜

如果将两个表与多个关联关联,则应使用别名(关联的选项as(区分它们:

User.belongsToMany(Project, { through: "UserProject" ,foreignKey:"user_id", as: "UsrProjects"});
Project.belongsToMany(User, { through: "UserProject" ,foreignKey:"project_id", as: "PrjUsers"});
User.hasMany(Project, { foreignKey : 'creator_id', as: "CreatedProjects" });
Project.belongsTo(models.user, { foreignKey : 'creator_id', as: "Creator" });

现在您可以在以下查询中使用这些别名:

const options = { 
where: { id: project_id },
include:[{
model: User,
as: "Creator"
}, {
model: User,
as: "PrjUsers"
}] 
}
const viewProject = await Project.findAll(options)
console.log(viewProject)

你可以看到这样的输出:

{
"data": [
{
"id": 1,
"project_title": "HKMS",
"creator_id": 2,
"Creator": {
"id" : 2,
"name": "Rahul"
},
"PrjUsers":[
{
"id" : 1,
"name": "Lokesh"
},
{
"id" : 3,
"name": "Mohit"
}
]
}
]
}

相关内容

最新更新