---
title: ビュー・並び順・ページネーション
description: "一覧は 2 種類でページングが異なり、ビューはフィルターとソートを持ち、カーソルは生成時の順序を運び、そしてすべてのフィールドを並び替えられるわけではありません。"
---

## ページング

一覧には 2 種類あり、ページングの方法が異なります。

ほとんどの一覧（商品、価格表、見積）は `limit` と `after` を取り、`nextCursor` を返します。次のページには `nextCursor` を `after` として渡し、`null` になったら終了します。`nextCursor` はそのページ最後の行の id です。

`limit` は 1 から 100 で、既定は 50。これはどちらの一覧でも同じです。

レコードの一覧はより多くを取ります。`limit`、`dir`、`orderBy` または `view`、`relatedTo` と `via`、そして `cursor` または `after` です。4 つの組み合わせは `400` で拒否され、これらはパラメータ一覧では表現できません。

- `via` には `relatedTo` が必要
- `orderBy` と `view` は併用できない
- `cursor` には `orderBy` か `view` のいずれかが必要
- `after` はそのどちらとも併用できない。順序付きのクエリは `cursor` でページングする

**カーソルはそれを生成した順序に属します。** 順序 — ソート、方向、関連レコードのフィルター、ビュー — はカーソルの内部に入っています。ビューが変わった後にカーソルを再利用すると、正しそうに見えて実際は違うページを返すのではなく、`cursor_ordering_mismatch` で明示的に失敗します。順序が変わったら最初のページから取り直してください。

**`total` は最初のページでのみ数えられます。** `after` も `cursor` もないリクエストは件数を返し、以降のページは `total: null` を返します。件数は毎ページではなく一度だけ支払われるため、表示したい場合は最初のページの値を保持してください。

## ビューはフィルターとソートをまとめたもの

ビューは条件、その結合方法、そしてソートを持ちます。条件は最大 10 件、ソートは最大 2 件です。`match` は `all` か `any` で既定は `all` なので、指定しないビューは広げるのではなく絞り込みます。

条件はフィールド、演算子、そして演算子によっては値を指定します。演算子は 4 系統に 33 個あり、系統が条件の形を決めます。

| 系統 | 個数 | 値 | 例 |
| --- | --- | --- | --- |
| 単項 | 15 | 取らない | `isEmpty`、`isTrue`、`isToday`、`isThisMonth`、`isPast` |
| 値 | 13 | ちょうど 1 つ | `contains`、`is`、`gt`、`before`、`onOrAfter`、`has` |
| リスト | 4 | 集合 | `isAnyOf`、`isNoneOf`、`hasAnyOf`、`hasNoneOf` |
| 範囲 | 1 | 上下の境界 | `isBetween` |

**演算子は API ではなくフィールドの種類に属します。** テキストフィールドはテキスト系、数値フィールドは数値系を取り、その集合はほとんど重なりません。

| フィールドの種類 | 受け付ける演算子 |
| --- | --- |
| `text`、`longtext`、`email`、`url`、`phone`、`user`、レコードの `name` | テキスト系 — `contains`、`is`、集合判定、空判定 |
| `decimal`、`currency`、`percent`、`formula` | 数値系 |
| `date`、`datetime`、`updated_at` | 日付系。上記の相対演算子を含みます |
| `select` | 選択系 |
| `multi_select` | `has`、`hasAnyOf`、`hasNoneOf`、`isEmpty`、`isNotEmpty` |
| `relation` | `has`、`isEmpty`、`isNotEmpty` |
| `boolean` | `isTrue`、`isFalse`、`isEmpty` |
| `address` | `contains`、`isEmpty`、`isNotEmpty` |
| `rollup`、`days_since` | **なし** — フィルター対象の列を持ちません |

この表の外の組み合わせは無視されるのではなく `filter_unsupported_for_field` で拒否されます。ユーザー入力から条件を組み立てる前にフィールドの種類を読んでください。

## すべてのフィールドを並び替えられるわけではない

並び替えにはデータベースが生成できる全順序と、カーソルが運べる単一の値が必要です。5 つの種類はそのどちらも持ちません。

- `relation`、`multi_select`、`address` は並び替えの基準になる単一の値を持ちません。
- `rollup` と `days_since` は列そのものがなく、クライアントが計算します。

それ以外は並び替えできます。この 5 つを `orderBy` に指定すると `order_field_unsupported` で拒否されます。カーソルに現れられないのも同じ理由です。
