7

我正在使用Scaphold.io构建我正在开发的一个小应用程序的后端,并且在尝试更新单个突变请求中的多个项目时遇到了问题。

在 Scaphold 中,当您创建新类型时,会为常见操作创建突变:创建、更新和删除。

您无法重新定义这些突变的架构或其输入类型。在我正在使用的模型类型中 ( card),我得到了开箱即用的这些突变:

createCard(input: CreateCardInput!): CreateCardPayload

updateCard(input: UpdateCardInput!): UpdateCardPayload

deleteCard(input: DeleteCardInput!): DeleteCardPayload

updateCardInput类型定义了以下字段:

listId: ID
description: Text
name: String
order: Int
id: ID!
clientMutationId: String

我能做什么:更新一张卡片

有了这个,我知道如何定义一个order为单张卡片更新的突变:

mutation updateCardOrder($card: UpdateCardInput!) {
  updateCard(input: $card) {
    changedCard {
      id
      order
    }
  }
}

变量:

{
  "card": {
    "id": "Q2FyZDo4MzA=",
    "order": "1"
  }
}

我想要做的:在一个突变中更新多张卡片

我得到了一些使用卡片列表 ( [card]) 作为输入的指针,但我不知道如何让它工作。

理想情况下,类似:

mutation updateCardOrder($cards: UpdateCardInput!) {
  updateCard(input: $card) {
    changedCard {
      id
      order
    }
  }
}

并将多张卡片作为变量传入,例如:

{
  "cards": [
    {
      "id": "Q2FyZDo4Mjk=",
      "order": "1"
    },
    {
      "id": "Q2FyZDo4MzA=",
      "order": "2"
    }
  ]
}

当我尝试这个时,我得到一个错误:

{
  "errors": [
    {
      "message": "Variable \"$cards\" of type \"[UpdateCardInput!]\" used in position expecting type \"UpdateCardInput!\".",
      "locations": [
        {
          "line": 1,
          "column": 32
        },
        {
          "line": 2,
          "column": 27
        }
      ],
      "name": "GraphQLError"
    }
  ]
}

那么……鉴于我无法在 Scaphold 中更改输入类型或突变模式,在 GraphQL 中考虑这样做的正确方法是什么?甚至可能吗?

4

1 回答 1

-3

由于您想在单个请求中运行多个突变,您可以使用 GraphQL 别名来完成此操作。更多信息在这里:https ://github.com/mugli/learning-graphql/blob/master/3.%20Querying%20with%20Field%20Aliases%20and%20Fragments.md

本质上,你可以做的是运行这样的突变:

mutation updateCardOrder($card1: UpdateCardInput!, $card2: UpdateCardInput!, $card3: UpdateCardInput!) {
  update1: updateCard(input: $card1) {
    changedCard {
      id
      order
    }
  }
  update2: updateCard(input: $card2) {
    changedCard {
      id
      order
    }
  }
  update3: updateCard(input: $card3) {
    changedCard {
      id
      order
    }
  }
}

变量看起来像这样:

{
  "card1": {
    "id": "Q2FyZDo4Mjk=",
    "order": "1"
  },
  "card2": {
    "id": "Q2FyZDo4MzA=",
    "order": "2"
  },
  "card3": {
    "id": "Q2FyZDo4MzA=",
    "order": "3"
  }
}

希望有帮助!

于 2017-04-07T23:53:51.960 回答