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