GraphQL Apollo中的多对多关系

时间:2019-06-29 07:42:31

标签: node.js express graphql sequelize.js apollo

当我开始充实我的第一个GraphQL后端时,我遇到了一个问题,即在需要数据透视表时如何处理模式和解析器中的多对多模型。

说我有用户和团队。他们每个人都在名为UserTeam的数据透视表中属于ToMany。问题是如何最好地使用解析器处理数据流。

现在,我可以通过为数据透视表创建模式并将解析器关系连接到该表来处理此问题。但这看起来很混乱。如果我这样做,查询将最终显示为:

query{
    user(ID: "1"){
        userTeams(){
            team{
                name
            }
        }
    }
}

现在必须有一种更好的方法来做到这一点。我只是不知道那是什么 是。

2 个答案:

答案 0 :(得分:1)

Sequelize支持belongsToMany关联,允许您通过另一个表/模型查询关联的模型 。至少在不需要数据透视表本身中的任何数据时,这通常用于M2M关系。例如,定义如下关系:

User.belongsToMany(Team, {through: 'UserTeam'})

将让您在返回的实例上调用适当的方法:

user.getTeams()

类似地,使用查找方法时,可能会包含关联的模型

User.findOne({ include:[Team] })

请参阅文档更多详细信息。

答案 1 :(得分:0)

查询将/应该更简单:

query{
  user(ID: "1"){
    userTeams {
      name
    }
  }
}

因为userTeams将是team类型的数组(解析器应返回)。

似乎不太杂乱?