如何通过 GraphQL 中的过滤器和顺序动态创建/获取数据?

Posted

技术标签:

【中文标题】如何通过 GraphQL 中的过滤器和顺序动态创建/获取数据?【英文标题】:How to create/Fetch data dynamically by filters and order in GraphQL? 【发布时间】:2021-10-27 04:44:57 【问题描述】:

我正在 graphql + apollo 客户端中创建一个查询,其过滤器和订单可以根据客户在前端选择的内容而改变。例如:

query (
        $orderPart: String!
        $wherePart: String!
        ) 
    getProductInfo(
        order $orderPart
        where $wherePart
    ) 
      productID
      description
      size
      model
      cathegoryNumber
    

其中 $orderPart 将等于“description: DESC”或“productID: ASC”(取决于客户在某一时刻选择了什么)。 $wherePart 将等于 "cathegoryNumber: eq: 12" 或 "productID: eq: 111111"。

我需要将 order/filter 子句完全作为参数传递。

但它不起作用。语法错误“语法错误:预期名称,找到 $”。

所以我的问题是......

有没有办法实现这些动态过滤器/订单?如何实现此功能?有没有其他方法来实现这个动态过滤器和订单?

谢谢。

注意: 在官方文档中,我发现只有值可以作为参数传递:

query (
        $orderValue: sortEnumType! = DESC
        $whereValue: String! = "description1"
        ) 
    getProductInfo(
        order productID: $orderValue
        where description: eq: $whereValue 
    ) 
      productID
      description
      size
      model
      cathegoryNumber
    

但这不是我需要的,因为始终无法更改过滤器/订单。第一次 (product:ASC),第二次 (cathegoryNumber:DESC) 等等,它们每次都可能完全不同……

【问题讨论】:

“不起作用。”没用。请说明问题。一个错误?出乎意料的反应? 变量不用于字符串替换 - 使用 $where$order(从 API 文档读取类型)并将对象作为变量传递 graphql.org/learn/queries/#mutations - 对象通过 graphql.org/learn/schema/#input-types 【参考方案1】:

感谢您的帮助,我找到了解决方案。创建模板时使用 apollo 客户端和变量:

let orderValue = 'order productID: ASC'; // built dynamically
let whereValue = 'description: eq: "description1"'; // built dynamically

document = gql`
query 
    getProductInfo(
        $orderValue
        $whereValue
    ) 
      productID
      description
      size
      model
      categoryNumber
    
    `;

【讨论】:

仍然,不是正确的解决方案....(模板文字+js变量)!= graphql变量(graphql.org/learn/queries/#variables)...***.com/a/64698051/6124657

以上是关于如何通过 GraphQL 中的过滤器和顺序动态创建/获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建接受多个 ids graphql 的过滤器?

如何:具有动态区域/组件的 Strapi GraphQL 突变

GraphQL 如何做一个 JOIN 请求而不是许多顺序请求?

使用 GraphQL 变量和 Next JS 过滤数组中的数据

如何过滤graphQL一对多关系中的查询?

Gatsby 和 GraphQL - 如何在查询中过滤数组