【问题标题】:GraphQL result for another mutation另一个突变的 GraphQL 结果
【发布时间】: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 吗?
  • 不是直接的。因为我们谈论的是两个电话,所以它们是独立的。客户端必须提供参数,即使它是先前突变的输出。如果保持相同的模式,这是客户的责任。如果您添加另一个“二合一”突变,则服务器可以知道在内部转发数据。

标签: javascript vue.js graphql vue-apollo graphql-mutation


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 2017-01-21
    • 1970-01-01
    • 2017-11-06
    • 2017-11-10
    • 2019-04-18
    • 2019-06-11
    • 2019-05-12
    • 2018-04-29
    相关资源
    最近更新 更多