如何在Laravel中通过Shopify GraphQL API获取商品总数量?
Shopify GraphQL 获取商品总数量实现数字分页方案
1. 直接通过GraphQL获取商品总数(无需拉取所有商品)
Shopify的ProductConnection类型自带totalCount字段,专门用来返回商品的总数量。你只需要在查询里指定这个字段,甚至可以把first设为0,不用返回任何商品数据,效率极高:
query GetTotalProductCount { products(first: 0) { totalCount } }
执行这个查询后,就能从返回结果的data.products.totalCount拿到准确的商品总数。
2. 修正你的分页计算逻辑
你之前的错误是用当前页的商品数量(count(edges))替代总数量,导致分页计算完全错误。现在用上面拿到的totalCount重新计算:
// 从GraphQL查询结果中获取总商品数 $totalProducts = $data['data']['products']['totalCount']; $numProducts = 9; // 每页展示9个商品 $totalPages = ceil($totalProducts / $numProducts); $pageNumbers = range(1, $totalPages);
这样计算出来的$totalPages和$pageNumbers就是准确的页码数据。
3. 结合数字页码实现分页查询
当用户点击某个页码时,你可以通过skip参数定位到对应页面的商品,配合first参数获取该页的商品数据:
query GetProductsByPage($skip: Int!, $first: Int!) { products(skip: $skip, first: $first) { edges { node { id title # 按需添加其他商品字段 } } pageInfo { hasNextPage hasPreviousPage } } }
比如用户点击第3页,$skip的值就是(3-1)*9=18,$first设为9,这样就能精准拉取第3页的9个商品,不会浪费资源。
之前方案的问题总结
- 用
count(edges)只能得到当前查询返回的商品数量,不是全站总商品数,自然算不对总页数; - 直接拉取
first:100虽然能得到总数,但会一次性返回大量商品,既影响性能,又会导致视图里显示所有商品,完全不符合分页需求。
内容的提问来源于stack exchange,提问作者Ruel Almonia
相关产品推荐
相关产品推荐

