如何在GraphQL查询变量中使用数组

时间:2019-09-22 14:50:15

标签: graphql gatsby graphql-js

我想在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="
    }
  }
}

1 个答案:

答案 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界面浏览架构。