GraphQL Apollo 中的多对多关系
Many-to-many relationships within GraphQL Apollo
当我开始充实我的第一个 GraphQL 后端时,我 运行 遇到了一个问题,即每当枢轴 table 出现时如何处理模式和解析器中的多对多模型需要。
假设我有用户和团队。他们每个人都属于一个名为 UserTeam 的支点 table 中的 ToMany。问题是如何最好地使用解析器处理数据流。
现在我可以通过为枢轴 table 创建一个模式并将解析器关系连接到它来处理这个问题。但它看起来很乱。如果我这样做,查询将结束,例如:
query{
user(ID: "1"){
userTeams(){
team{
name
}
}
}
}
现在必须有更好的方法来做到这一点。我只是不知道它是什么
是。
Sequelize 支持belongsToMany 关联,允许您通过 另一个table/model 查询关联模型。这是 M2M 关系的常用方法,至少当您不需要来自枢轴 table 本身的任何数据时。例如定义如下关系:
User.belongsToMany(Team, {through: 'UserTeam'})
会让您在返回的实例上调用适当的方法:
user.getTeams()
同样,使用查找方法时,可能会包含关联模型:
User.findOne({ include:[Team] })
查看文档了解更多详情。
查询will/should简单一点:
query{
user(ID: "1"){
userTeams {
name
}
}
}
因为 userTeams
将是(解析器应该 return)team
类型的数组。
好像没那么乱了?
当我开始充实我的第一个 GraphQL 后端时,我 运行 遇到了一个问题,即每当枢轴 table 出现时如何处理模式和解析器中的多对多模型需要。
假设我有用户和团队。他们每个人都属于一个名为 UserTeam 的支点 table 中的 ToMany。问题是如何最好地使用解析器处理数据流。
现在我可以通过为枢轴 table 创建一个模式并将解析器关系连接到它来处理这个问题。但它看起来很乱。如果我这样做,查询将结束,例如:
query{
user(ID: "1"){
userTeams(){
team{
name
}
}
}
}
现在必须有更好的方法来做到这一点。我只是不知道它是什么 是。
Sequelize 支持belongsToMany 关联,允许您通过 另一个table/model 查询关联模型。这是 M2M 关系的常用方法,至少当您不需要来自枢轴 table 本身的任何数据时。例如定义如下关系:
User.belongsToMany(Team, {through: 'UserTeam'})
会让您在返回的实例上调用适当的方法:
user.getTeams()
同样,使用查找方法时,可能会包含关联模型:
User.findOne({ include:[Team] })
查看文档了解更多详情。
查询will/should简单一点:
query{
user(ID: "1"){
userTeams {
name
}
}
}
因为 userTeams
将是(解析器应该 return)team
类型的数组。
好像没那么乱了?