简体   繁体   中英

Using multiple mutations in one call

I have written my first script that utilises GraphQL (Still a learning curve)

Currently i am making 3 calls using GraphQL, First is a product lookup, Second is a Price Update, Third is a Inventory Update.

To reduce the number of calls to the end point i wanted to merge both Price update and Inventory, But i am having 0 luck, i dont know if its bad formatting.

Here is my GraphQL Code (I am using Postman to help ensure the schema is correct before taking it to 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
    }
  }
}
}
    

Variables:

{
"inventoryItemId": "gid://shopify/InventoryItem/XXXXXXXXXXX",
"locationId": "gid://shopify/Location/XXXXXXXXXX",
"available": 11 ,
  "input": {
    "id": "gid://shopify/ProductVariant/XXXXXXXXX",
    "price": 55
  }
}

Error i keep getting:

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

The way that you'd go about this is by specifying all your arguments at the root of your mutation , just like you did for 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 }
    ...
  }

}

Here's an example how this would work if you were to use fetch in 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
    }
  })
})

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM