另一个突变的 GraphQL 结果

Posted

技术标签:

【中文标题】另一个突变的 GraphQL 结果【英文标题】:GraphQL result for another mutation 【发布时间】:2022-01-17 00:52:21 【问题描述】:

是否可以同时使用 GraphQL 突变的结果作为另一个突变的参数?

我想一次性创建一个用户和他的地址。

首先我写入地址,然后获取地址 id 用于创建用户。 通过输入填充必要的数据效果很好

这是否可能在不触发来自客户端的新突变的情况下实现?

const createUser = gql`
  mutation createUser(
    $user: createUserInput!
    $address: createAddressInput!
  ) 
    createAddress(input: $address) 
      address 
        id       
      
    
    createUser(input: $user ) 
      user 
        id
        username
      
    
  
`

【问题讨论】:

您需要添加第三个突变来同时执行这两个操作。一个接一个地调用两个突变意味着来自客户端的两个调用。 你对这两个调用是正确的,但是可以直接在 createUser 调用中获取地址 id 吗? 不是直接的。因为我们谈论的是两个电话,所以它们是独立的。客户端必须提供参数,即使它是先前突变的输出。如果保持相同的模式,这是客户的责任。如果您添加另一个“二合一”突变,则服务器可以知道在内部转发数据。 【参考方案1】:

不,这是不可能的。您要么必须从客户端发出两个顺序请求,要么调整您的服务器实现。我推荐后者。

您应该更改架构,使CreateUserInput 类型不仅接受addressId: ID,而且还可以接受newAddress: CreateAddressInput 对象,然后它将在创建新用户之前用于创建新地址。

【讨论】:

以上是关于另一个突变的 GraphQL 结果的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular Apollo Graphql 中访问突变结果

在graphql中突变后查询

将函数结果传递给 graphql 突变

GraphQL 查询/突变的响应

如何在突变 graphQL Playground 中传递变量?

返回突变结果的正确方法? (GraphQL 与 Apollo 和 Mongoose