【问题标题】:GraphQL: referencing other idsGraphQL:引用其他 id
【发布时间】:2020-01-15 17:26:48
【问题描述】:

我有一系列表格,例如:

Person:
person_id
first_name
last_name

CompanyPerson
person_id
company_id

Company
company_id
name

OfficePerson
office_id
person_id

Office
office_id
company_id
address_1
address_2
...

我将如何向 graphQL 表明以下信息:名字是“Joe”、公司名称、办公地址(仅限 JOE 所属的办公地址)。

people(firstName: "joe") {
  company {
    name
    office {
      address_1
      address_2
    }
  }
}

如果这是一个单一的请求,我可以设置“上下文”来谈论“乔”

person(firstName: "joe") {
}

我可以使用 graphql 查询模式来添加更多上下文限制(用户:“Joe”)

由于这是针对多人的,因此我没有看到基于先前对象中提供的信息进一步细化查询的方法。

使用:Ruby 最新; graphql-ruby 最新;

谢谢,

-丹尼尔

【问题讨论】:

    标签: nested graphql


    【解决方案1】:

    解析器函数接收四个参数,其中一个是obj——从前一个字段返回的对象。例如,解析器映射可以在相关部分显示为关注者:

        // Root query/entry pt.
        Query: {
            async user(obj, input, context) {
              try 
                return user; // returns type User
              } catch (e) {
               console.log('err', e);
              }
            },
    
       ......
        // NOT a root query/entry pt.
        User: {
            async followers(obj, input, context) {
              try {
               const followers = await getFollowersByUserId(obj.id);
               return followers;
              } catch (e) {
                console.log('err', e);
              }
           },
    

    在上面,在用户的根查询返回后,graphql 知道要查找用户类型上的字段——在这种情况下,例如,followers。用户根查询的返回值以obj 的形式提供,可用于解析用户上的字段。无论查询是解析单个用户还是用户类型的数组,这都应该成立。虽然上面是在 js 中,但这对于 ruby​​ 应该是正确的,尽管您的架构可能需要修改。

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 1970-01-01
      • 2021-07-29
      • 2018-06-13
      • 1970-01-01
      • 2016-10-10
      • 2022-10-30
      • 2020-12-03
      • 2016-02-01
      相关资源
      最近更新 更多