Graphql 在一次呼叫中使用多个突变

Graphql 在一次呼叫中使用多个突变,graphql,shopify,Graphql,Shopify,我已经编写了第一个使用GraphQL的脚本(仍然是一个学习曲线) 目前我正在使用GraphQL打3个电话, 首先是产品查找, 二是价格更新,, 第三是库存更新 为了减少通话次数,我想合并价格更新和库存,但我运气不好,我不知道它的格式是否不好 这是我的GraphQL代码(我使用Postman来帮助确保模式正确无误,然后再将其转换为PHP) 变量: { "inventoryItemId": "gid://shopify/InventoryItem/XXXXXXXXXXX

我已经编写了第一个使用GraphQL的脚本(仍然是一个学习曲线)

目前我正在使用GraphQL打3个电话, 首先是产品查找, 二是价格更新,, 第三是库存更新

为了减少通话次数,我想合并价格更新和库存,但我运气不好,我不知道它的格式是否不好

这是我的GraphQL代码(我使用Postman来帮助确保模式正确无误,然后再将其转换为PHP)

变量:

{
"inventoryItemId": "gid://shopify/InventoryItem/XXXXXXXXXXX",
"locationId": "gid://shopify/Location/XXXXXXXXXX",
"available": 11 ,
  "input": {
    "id": "gid://shopify/ProductVariant/XXXXXXXXX",
    "price": 55
  }
}
我不断得到的错误:

{
    "errors": [
        {
            "message": "Parse error on \"$\" (VAR_SIGN) at [29, 29]",
            "locations": [
                {
                    "line": 29,
                    "column": 29
                }
            ]
        }
    ]
}

要做到这一点,您需要在
变异
的根处指定所有参数,就像您在
ProductVariantInput
中所做的那样:

mutation batchProductUpdates(
  $input: ProductVariantInput!
  $inventoryItemId: ID!
  $locationId: ID!
  $available: Int
) {
  
  productVariantUpdate(input: $input) {
    product { id }
    productVariant { id price }
    ...
  }
  
  inventoryActivate(
    inventoryItemId: $inventoryItemId
    locationId: $locationId
    available: $available
  ) {
    inventoryLevel { id available }
    ...
  }

}
下面是一个示例,如果您在
JavaScript
中使用
fetch
,这将如何工作:

fetch(“https://example.com/graphql", {
方法:“张贴”,
标题:{“内容类型”:“应用程序/json”},
正文:JSON.stringify({
查询:`
突变MyMutation($firstId:Int,$secondId:Int){
m1:切换式(id:$firstId){
身份证件
}
m2:ToggleLike(id:$secondId){
身份证件
}
}
`,
变量:{
第一个ID:1,
第二个ID:2
}
})
})

希望这能有所帮助。

非常感谢,解释了我收到的其他一些不同格式的信息。谢谢你的例子,现在更有意义了。谢谢你的回答,你能使用第一次调用返回的值并在第二次调用中使用它吗?@BradyEdgar你必须进行两次单独的调用,因此如果你使用
fetch
,您可以在
中进行第二次调用。然后
回调并使用第一次调用返回的值。@goto1好的,谢谢您的更新,我现在正在这样做,我只是希望能将它压缩到一次调用中。谢谢
mutation batchProductUpdates(
  $input: ProductVariantInput!
  $inventoryItemId: ID!
  $locationId: ID!
  $available: Int
) {
  
  productVariantUpdate(input: $input) {
    product { id }
    productVariant { id price }
    ...
  }
  
  inventoryActivate(
    inventoryItemId: $inventoryItemId
    locationId: $locationId
    available: $available
  ) {
    inventoryLevel { id available }
    ...
  }

}