GraphQL:是否可以搜索嵌套字段?

时间:2018-11-08 22:42:33

标签: graphql shopify

我专门使用shopify graphql admin api查询订单。

我想搜索嵌套的相关字段。

下面是我的查询。

export const orderHistoryQuery = gql`
  query Order($productsFirst: Int!, $productsAfter: String, $filterQuery: String) {
    orders(first: $productsFirst, after: $productsAfter, reverse: true, query:$filterQuery) {
      edges {
        cursor
        node {
          id
          name
          customer {
            id
            metafields(first: 10) {
              edges {
                node {
                  id
                  key
                  value
                  namespace
                }
                cursor
              }
            }
          }
          totalPriceSet {
            shopMoney {
              amount
              currencyCode
            }
          }
          subtotalPriceSet {
            shopMoney {
              amount
              currencyCode
            }
          }
          totalRefundedSet {
            shopMoney {
              amount
              currencyCode
            }
          }
          currencyCode
          email
          phone
          processedAt
          totalShippingPriceSet {
            shopMoney {
              amount
              currencyCode
            }
          }
          totalTaxSet {
            shopMoney {
              amount
              currencyCode
            }
          }
          shippingAddress {
            firstName
            lastName
            address1
            address2
            city
            province
            zip
            country
          }
          billingAddress {
            firstName
            lastName
            address1
            address2
            city
            province
            zip
            country
          }
          customAttributes {
            key
            value
          }
        }
      }
    }
  }
`;

我真的想查询元字段或任何东西,但似乎不支持它。我不确定我只是使用了错误的查询语法还是不受支持。 shopify搜索语法文档并没有真正帮助,这就是我对graphql的了解不足的地方。

是否可以在graphql中执行此操作?我还尝试添加设置不支持的metafields(id:$ whateverID)。

2 个答案:

答案 0 :(得分:1)

很遗憾,Shopify不支持<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title> Dynamically </title> <style type="text/css"> form{ margin: 20px 0; } form input, button{ padding: 5px; } table{ width: 100%; margin-bottom: 20px; border-collapse: collapse; } table, th, td{ border: 1px solid #cdcdcd; } table th, table td{ padding: 10px; text-align: left; } </style> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $(".add-row").click(function(){ var name = $("#name").val(); var email = $("#email").val(); var markup = "<tr><td><input type='checkbox' name='record'></td><td>" + name + "</td><td>" + email + "</td></tr>"; if ($('#name').val() == "") { alert('Please Enter the Name'); $('#name').focus(); } else if ($('#email').val() == "") { alert('Please Enter the email'); $('#email').focus(); } else { $("table tbody").append(markup); $("#name").val(""); $('#email').val(''); $('#name').focus(); } }); // Find and remove selected table rows $(".delete-row").click(function(){ $("table tbody").find('input[name="record"]').each(function(){ if($(this).is(":checked")){ $(this).parents("tr").remove(); } }); }); }); </script> </head> <body> <input type="text" id="name" placeholder="Name"> <input type="text" id="email" placeholder="Email Address"> <input type="submit" class="add-row" value="Add Row"> </form> <table> <thead> <tr> <th>Select</th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> <!--<tr> <td><input type="checkbox" name="record"></td> <td></td> <td></td> </tr>--> </tbody> </table> <button type="button" class="delete-row">Delete Row</button> <button onclick="myFunction()">Click me</button> </body> </html> 上的查询过滤器。解决这个问题的最佳方法是使用诸如GraphiQL之类的graphql资源管理器。如果您转到应用程序> Shopify GraphiQL App,则Shopify仪表板内置了此功能。

使用GraphiQL可以看到:

  1. 客户查询不支持元字段: customers query
  2. 订单查询不支持客户或元字段: orders query
  3. 而且客户的元字段没有查询参数: metafields params

我认为您的选择是要么查询并在获得结果后过滤,要么使用客户标签并按标签查询。

答案 1 :(得分:0)

您真的可以通过简化事情来帮助您的事业。我的建议是尝试一个简单的查询。你可以下订单吗?由于订单有一个客户(通常但并非总是有客户),您可以获得与该客户相关联的元字段吗?

在尝试展示自己要做什么的过程中遇到了很多障碍,这几乎就像在尝试调试任何东西时要偏头痛一样。从GraphQL网站的角度来看,对GraphQL的端点调用已被很好地记录在案,Shopify只是一个很好的实现,请注意,它们会根据复杂性向您收取呼叫费用,因此您最好监控信用。

所以,尝试简单的通话。获得一个产品,它就是Metafields。获取客户记录及其“元字段”。如果可以做到,那么您就不会挑战文档,也不会挑战GraphQL查询的概念。一旦基本工作全部完成,您就可以处理变量,游标,页面调度等...,但是在一次性调用提供您想要的功能之前,调试应该集中在最简单的调用上,而不是所有东西和厨房水槽上。

此外,当您打乱对端点的呼叫时,Shopify通常会返回一个响应,其中包含有关您弄错了位置的详细信息,从而为您提供了一个第一眼的地方。我们看不到您的回应,因此无济于事。