メインコンテンツへスキップする

ページングと並び替え

Limit

Limit を指定すると、クエリの結果を n 個のエンティティに制限します。

users, err := client.User.
Query().
Limit(n).
All(ctx)

Offset

Offset は、クエリから返す最初のノードを設定します。

users, err := client.User.
Query().
Offset(10).
All(ctx)

並び替え

Order は、1 つ以上のフィールドの値で並び替えされたエンティティを返します。 指定したフィールドが有効な列または外部キーでない場合、エラー が返されることに注意してください。

users, err := client.User.Query().
Order(ent.Asc(user.FieldName)).
All(ctx)

エッジフィールドでの並び替え

エッジ(リレーション) のフィールドで並べ替えるには、並び替えに指定したいエッジから走査を開始します。 並び替えを適用した後、本来のターゲットにジャンプします。

以下は、 "pets""name" でユーザを昇順に並べる方法を示しています。

users, err := client.Pet.Query().
Order(ent.Asc(pet.FieldName)).
QueryOwner().
All(ctx)

カスタムオーダー

独自のストレージ固有のロジックを記述したい場合には、カスタムオーダー関数が役に立ちます。

以下は、ペットを、ペットの名前と飼い主の名前で昇順に並べ替えたものを示しています。

names, err := client.Pet.Query().
Order(func(s *sql.Selector) {
// owner-nameとpet-nameで並び替えるために、userテーブルと結合します
t := sql.Table(user.Table)
s.Join(t).On(s.C(pet.OwnerColumn), t.C(user.FieldID))
s.OrderBy(t.C(user.FieldName), s.C(pet.FieldName))
}).
Select(pet.FieldName).
Strings(ctx)