一次通话中使用多个突变

时间:2020-06-29 10:30:35

标签: graphql shopify

我已经编写了第一个利用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
                }
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

您要进行此操作的方法是,在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 }
    ...
  }

}

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

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
    }
  })
})

希望这会有所帮助。