GraphQL,Dataloader,[ORM或not],具有许多关系理解
我第一次使用Facebook的dataloader() 我不明白的是当我有1对多关系时如何使用它 这是我问题的再现: 如果您在操场上使用此查询:GraphQL,Dataloader,[ORM或not],具有许多关系理解,orm,sequelize.js,graphql,graphql-js,apollo-server,Orm,Sequelize.js,Graphql,Graphql Js,Apollo Server,我第一次使用Facebook的dataloader() 我不明白的是当我有1对多关系时如何使用它 这是我问题的再现: 如果您在操场上使用此查询: query { persons { name bestFriend { name } opponents { name } } } 你得到了价值 但是如果您在此处打开控制台日志:您可以看到我想要避免的这些数据库调用: 我的人类型是: type Person { id: ID
query {
persons {
name
bestFriend {
name
}
opponents {
name
}
}
}
你得到了价值
但是如果您在此处打开控制台日志:您可以看到我想要避免的这些数据库调用:
我的人类型是:
type Person {
id: ID!
name: String!
bestFriend: Person
opponents: [Person]
}
我可以将dataloader用于好友:Person
,但我不知道如何将其用于对手:[Person]
正如您所看到的,解析器必须返回一个值数组
您对此有什么提示吗?您需要创建批处理端点才能使用dataloader—它不能单独进行批处理 例如,您可能需要以下端点:
GET /persons - returns all people
POST /bestFriends, Array<personId>` - returns an array of best friends matchin the corresponding array of `personId`s
现在,您的解析器将类似于:
const PersonType = new GraphQLObjectType({
...
bestFriend: {
type: BestFriendType,
resolve: (person, args, context) => {
return bestFriendLoader.load(person.id);
}
}
});
const PersonType = new GraphQLObjectType({
...
bestFriend: {
type: BestFriendType,
resolve: (person, args, context) => {
return bestFriendLoader.load(person.id);
}
}
});