繁体   English   中英

Apollo GraphQL 嵌套变异

[英]Apollo GraphQL Nested Mutation

需要一些有关嵌套突变的帮助。

抽象的场景是这样的:

我想在 apollo-server 上结合 2 个变异调用来首先创建一个Customer然后为该客户创建一个Address Address突变需要一个customerID才能做到这一点,但也有来自它需要访问的原始整体突变的信息。

这是通用代码:

makeExecutableSchema({
  typeDefs: gql`
    type Mutation {
      createCustomerWithAddress(customer: CustomerRequest!, address: AddressRequest!): Response
    }
    input CustomerRequest {
       name: String!
    }

    input AddressRequest {
       address: String!
       city: String!
       state: String!
       country: String!
    }

    type Response {
       customerID: Int!
       addressID: Int!
    }
  `,
  resolvers: {
    Mutation: {
      createCustomerWithAddress: async (_, {customer}, context, info) => {
        return await api.someAsyncCall(customer);
      }
    },
    Response: {
      addressID: async(customerID) => {
        // how do we get AddressRequest here?
        return await api.someAsyncCall(customerID, address);
      }
    }
  }
})



我没有从原始代码中展示出很多复杂性,但我想要了解的只是如何通过子突变访问请求参数的根源,如果可能的话。 我真的不想将address从顶部突变传递到子突变。

您不需要解析器中的Response字段。 createCustomerWithAddress应该返回一个形状像Response的对象。

resolvers: {
    Mutation: {
      createCustomerWithAddress: async (_, {customer, address}, context, info) => {
        // create customer
        const customerId = await api.CreateCustomer(customer);
        // create address and assign customerId
        const addressId = await api.CreateAddress({ ...address, customerId });
        // return response
        return { customerId, addressId };
      }
    },
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM