我专门使用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)。
答案 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 :(得分:0)
您真的可以通过简化事情来帮助您的事业。我的建议是尝试一个简单的查询。你可以下订单吗?由于订单有一个客户(通常但并非总是有客户),您可以获得与该客户相关联的元字段吗?
在尝试展示自己要做什么的过程中遇到了很多障碍,这几乎就像在尝试调试任何东西时要偏头痛一样。从GraphQL网站的角度来看,对GraphQL的端点调用已被很好地记录在案,Shopify只是一个很好的实现,请注意,它们会根据复杂性向您收取呼叫费用,因此您最好监控信用。
所以,尝试简单的通话。获得一个产品,它就是Metafields。获取客户记录及其“元字段”。如果可以做到,那么您就不会挑战文档,也不会挑战GraphQL查询的概念。一旦基本工作全部完成,您就可以处理变量,游标,页面调度等...,但是在一次性调用提供您想要的功能之前,调试应该集中在最简单的调用上,而不是所有东西和厨房水槽上。
此外,当您打乱对端点的呼叫时,Shopify通常会返回一个响应,其中包含有关您弄错了位置的详细信息,从而为您提供了一个第一眼的地方。我们看不到您的回应,因此无济于事。