我正在使用Scaphold.io来构建我正在处理的小应用程序的后端,并且在尝试更新单个突变请求中的多个项目时遇到了问题。
在Scaphold中,当您创建新的Type时,会为常见操作创建突变:创建,更新和删除。
您无法重新定义这些突变或其输入类型的架构。在我正在使用的模型类型(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中考虑这样做的正确方法是什么?它甚至可能吗?
答案 0 :(得分:-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"
}
}
希望有所帮助!