在一次调用中使用多个突变

Using multiple mutations in one call

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

目前我正在使用 GraphQL 进行 3 次调用, 首先是产品查找, 其次是价格更新, 第三个是库存更新。

为了减少对终点的调用次数,我想合并价格更新和库存,但我的运气为 0,我不知道它的格式是否错误。

这是我的 GraphQL 代码(我使用 Postman 来帮助确保架构正确无误,然后再将其发送到 PHP)

mutation  productVariantUpdate($input: ProductVariantInput!) {
  productVariantUpdate(input: $input) {
    product {
      id
    }
    productVariant {
      id
      price
    }
    userErrors {
      field
      message
    }}

 second:  inventoryActivate($inventoryItemId: ID!, $locationId: ID!, $available: Int) {
  inventoryActivate(inventoryItemId: $inventoryItemId, locationId: $locationId, available: $available) {
    inventoryLevel {
      id
      available
    }
    userErrors {
      field
      message
    }
  }
}
}
    

变量:

{
"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
                }
            ]
        }
    ]
}

解决此问题的方法是在 mutation 的根目录中指定所有参数,就像您对 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", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    query: `
      mutation MyMutation($firstId: Int, $secondId: Int) {
        m1: ToggleLike(id: $firstId) {
          id
        }
        m2: ToggleLike(id: $secondId) {
          id
        }
      }
    `,
    variables: {
      firstId: 1,
      secondId: 2
    }
  })
})

希望这对您有所帮助。