Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GraphQL,Dataloader,[ORM或not],具有许多关系理解_Orm_Sequelize.js_Graphql_Graphql Js_Apollo Server - Fatal编程技术网

GraphQL,Dataloader,[ORM或not],具有许多关系理解

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

我第一次使用Facebook的dataloader()

我不明白的是当我有1对多关系时如何使用它

这是我问题的再现:

如果您在操场上使用此查询:

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);
    }
  }
});