【问题标题】:Simplest usage of GraphQL using WHERE, AND, OR while using a Query Parameter使用查询参数时使用 WHERE、AND 或 OR 最简单的 GraphQL 用法
【发布时间】:2022-09-24 03:22:28
【问题描述】:

我正在为使用 GraphQL 的网站上的简单搜索创建搜索查询。

我一直在寻找最简单的 GraphQL 工作示例,但我在 Stack Overflow 上发现的问题/示例要么太简单、太具体,​​要么太技术化,包括来自 API 的太多不必要的位。

何时使用 {}、何时使用 where 以及何时使用可选命名的模式似乎破坏了文档中解释的模式。

这里的任何见解将不胜感激。

    标签: graphql apollo-client graphql-playground


    【解决方案1】:

    好问题。

    下面是我将如何开始。我假设您已经使用 Products 设置了一个数据库,并且这些 Products 有一个 name 和一个 description

    首先 - 这是你如何获得所有产品(你将把它输入到 GraphQL 游乐场)。:

    query {
      allProducts {
        name
        description
      }
    }
    

    其次 - 这是您获得具有特定名称的产品的方法:

    query {
      allProducts (where: {name: "Nike Air VaporMax"}){
        name
        description
      }
    }
    

    第三 - 这是如何在名称或描述中引入“包含”的方法包含“耐克”。 _i 后缀表示不区分大小写。

    query {
      allProducts (where: {name_contains_i: "nike"}){
        name
        description
      }
    }
    

    第四 - 这是如何引入 OR(注意逗号和容器大括号):

    query {
      allProducts (where: {
        OR: [{description_contains_i:"shoes"}, {name_contains_i:"shoes"}]
        }
      )
        {
        name
        description
      }
    }
    

    第五 - 这里是如何引入 AND (​​同上,注意逗号和大括号):

    query {
      allProducts (where: {
        AND: [{description_contains_i:"shoes"}, {name_contains_i:"shoes"}]
        }
      )
        {
        name
        description
      }
    }
    

    第六——这里是如何开始引入变量——我们将把它与 WHERE + OR 一起使用:

    query ($varTest: String!) {
      allProducts(
        where: {
          OR: [{ description_contains_i: "shoes" }, { name_contains_i: $varTest }]
        }
      ) {
        name
        description
      }
    }
    

    而且!重要!对于上述内容,您需要填写查询变量:

    {
      "varTest": "Nike"
    }
    

    如果您不熟悉放置查询变量的位置,它大致如下所示(查找放置查询变量的第二个窗口。)

    第七 - 这是踢球者。您可以选择命名这些查询。模式一致性的破坏最初让我感到厌烦。让我在这里添加一个非常明显的名称,以便您也可以看到它:

    query THIS_IS_MY_COOL_QUERY_NAME($varTest: String!) {
     allProducts(
        where: {
          OR: [{ description_contains_i: "shoes" }, { name_contains_i: $varTest }]
        }
      ) {
        name
        description
      }
    }
    

    八 - 奖金。你不需要这个,但我想在这里介绍它,这样它以后不会让你失望。提交查询时,您可以为返回的返回对象数组指定自己的名称。不要让这句话让你感到困惑,我会给你返回数组的例子,这样你就清楚了。

    这是第八个查询(不要忘记像在第七个示例中那样使用查询变量)。我将直接在查询中添加一个非常明显的名称:

    query THIS_IS_MY_COOL_QUERY_NAME($varTest: String!) {
      resultsWillBeReturnedAsArrayWithThisName: allProducts(
        where: {
          OR: [{ description_contains_i: "shoes" }, { name_contains_i: $varTest }]
        }
      ) {
        name
        description
      }
    }
    

    上一个查询(第七个)的结果将如下所示:

    {
      "data": {
        "allProducts": [
          {
            "name": "Air Jordan 1",
            "description": "Wow - there are shoes!"
          },
          {
            "name": "Nike Blazer Mid",
            "description": "Very nice!"
          },
          {
            "name": "Shoes",
            "description": "These are shoes!"
          }
        ]
      }
    }
    

    但是八个查询的结果看起来像这样(请注意您介绍的名称将如何从 GraphQL 中返回给您)。 :

    {
      "data": {
        "resultsWillBeReturnedAsArrayWithThisName": [
          {
            "name": "Air Jordan 1",
            "description": "Wow - there are shoes!"
          },
          {
            "name": "Nike Blazer Mid",
            "description": "Very nice!"
          },
          {
            "name": "Shoes",
            "description": "These are shoes!"
          }
        ]
      }
    }
    

    这应该为您理解 GraphQL 提供了坚实的基础。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2013-06-04
      相关资源
      最近更新 更多