Firstなどに与える引数部分を動的に変えられるのか?

query{
  orders(first: 5) {
    edges {
      node {
        id
        name
        customer {
          addresses(first:1) {
            id
            zip
          }
        }
        lineItems(first: 3) {
          edges {
            node {
              id
              sku
              name
              quantity
            }
          }
        }
      }
    }
  }
}

例えば上記のようなクエリを作成した際に現状、firstに入れる数字は適当に入れている状態なのですが、これだとoreders紐づくlineItemsを取得する際に3つの商品までしか取得できない問題があると思います。注文の中に含まれる商品は、1~10それ以上と色々な数が入る可能性があると思うので、注文ごとに含まれる商品数だけlineItemsのfirstの数字部分を動的に変えれないのかなと思ったのですが、実現方法がわからず質問させていただきました。

@ryu245

ご存知であれば、スルーしてください。

firstやlastを動的に変更する方法は調べていないのですが、

pageInfoを使用されるのはどうでしょうか?

参考:

https://shopify.dev/docs/api/admin-graphql/2023-04/objects/PageInfo

https://shopify.dev/docs/api/usage/pagination-graphql

掲載いただいているコードを例にしますと、下記のようになります。

query{
  orders(first: 5) {
    edges {
      node {
        id
        name
        customer {
          addresses(first:1) {
            id
            zip
          }
        }
        lineItems(first: 3) {
          edges {
            node {
              id
              sku
              name
              quantity
            }
          }
                     pageInfo {
            hasNextPage
            endCursor
          }
        }
      }
    }
  }
}

商品が4つ以上ある場合、

pageInfo.hasNextPageがtrueとなります。

endCursorには、最後のnodeを表す文字列が入ってきますので、

下記のようにすることで、続きの3件を取得できます。

lineItems(first: 3, after: "endCursorの文字列") {
          edges {
            node {
              id
              sku
              name
              quantity
            }
          }
                     pageInfo {
            hasNextPage
            endCursor
          }
        }

pageInfo.hasNextPageがFalseになるまで繰り返せば、

全ての商品情報を取得できます。

ご存知であればスルーしてください。

(キュー田辺)