我想在GraphQL查询变量中使用一个数组,这样我就可以通过Gatsby从单个查询中获取一个以上产品的数据,但是此刻出现错误。
我的graphQL查询如下:
query ($id: [String!]) {
shopifyProduct(handle: {eq: $id}) {
handle
id
title
handle
productType
shopifyId
}
}
和我的查询变量如下:
{
"id": ["liner-jacket", "pocket-t-shirt"]
}
所需的响应是(类似):
{
"data": {
"shopifyProduct": {
"handle": "liner-jacket",
"id": "Shopify__Product__hopbjidjoqjndadnawdawda123123=",
"title": "Liner Jacket",
"productType": "jacket",
"shopifyId": "hopbjidjoqjndadnawdawda123123="
},
"shopifyProduct": {
"handle": "pocket-t-shirt",
"id": "Shopify__Product__iajwdoiajdoadjwaowda4023123=",
"title": "Pocket T-Shirt",
"productType": "t-shirt",
"shopifyId": "iajwdoiajdoadjwaowda4023123="
}
}
}
答案 0 :(得分:0)
GraphQL支持一种特殊的List类型,该类型表示特定类型的数组。例如,[String]
是类型String
的列表。即使[String]
类型包装 String
,在GraphQL中,它也被认为是与{{ 1}}。换句话说,您不能在期望String
的地方使用[String]
,也不能在期望String
的地方使用String
。
参数(如[String]
)或输入对象字段(如handle
)只有一个GraphQL类型。如果将变量用作参数的值,则其类型必须与该参数的类型匹配。看来eq
的类型为eq
(非空字符串),因此您只能将其传递给单个String!
,而不是列表。
是否存在一种基于值数组的查询方式取决于服务器实现。某些模式支持执行此操作的方法(例如,可能有一个String
字段可以接受列表,而不是eq
)。但是,这是特定于架构的。查看您正在使用的服务器/框架/库的文档,或使用可用的GraphiQL或GraphQL Playground界面浏览架构。