You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:50:03