GraphQL Apollo 中的多对多关系
Posted
技术标签:
【中文标题】GraphQL Apollo 中的多对多关系【英文标题】:Many-to-many relationships within GraphQL Apollo 【发布时间】:2019-11-10 22:39:19 【问题描述】:当我开始充实我的第一个 GraphQL 后端时,我遇到了一个问题,即如何在需要数据透视表时处理模式和解析器中的多对多模型。
假设我有用户和团队。它们中的每一个都在名为 UserTeam 的数据透视表中属于ToMany。问题是如何最好地使用解析器处理数据流。
现在我可以通过为数据透视表创建架构并将解析器关系连接到该架构来处理这个问题。但这似乎太乱了。如果我这样做,查询将结束,例如:
query
user(ID: "1")
userTeams()
team
name
现在必须有更好的方法来做到这一点。我只是不知道它是什么 是。
【问题讨论】:
【参考方案1】:Sequelize 支持belongsToMany 关联,允许您通过另一个表/模型查询关联的模型。这通常用于 M2M 关系,至少当您不需要数据透视表本身的任何数据时。例如定义如下关系:
User.belongsToMany(Team, through: 'UserTeam')
将让您在返回的实例上调用适当的方法:
user.getTeams()
同样,在使用 find 方法时,可能会包含相关模型:
User.findOne( include:[Team] )
查看文档了解更多详情。
【讨论】:
【参考方案2】:查询将/应该更简单一些:
query
user(ID: "1")
userTeams
name
因为userTeams
将是(解析器应该返回)team
类型的数组。
看起来不那么凌乱了?
【讨论】:
以上是关于GraphQL Apollo 中的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
在 TypeORM 与 GraphQL 的多对多关系上使用数据加载器,查询多对多