Constructor
# new Paginator(adapter, query, size, clazz)
Provides functionality for navigating through paginated query results
This abstract class manages the state and navigation of paginated database query results. It tracks the current page, total pages, and record count, and provides methods for moving between pages.
Handles pagination for database queries
sequenceDiagram
participant Client
participant Paginator
participant Adapter
participant Database
Client->>Paginator: new Paginator(adapter, query, size, clazz)
Client->>Paginator: page(1)
Paginator->>Paginator: validatePage(1)
Paginator->>Paginator: prepare(query)
Paginator->>Adapter: execute query with pagination
Adapter->>Database: execute query
Database-->>Adapter: return results
Adapter-->>Paginator: return results
Paginator-->>Client: return page results
Client->>Paginator: next()
Paginator->>Paginator: page(current + 1)
Paginator->>Paginator: validatePage(current + 1)
Paginator->>Adapter: execute query with pagination
Adapter->>Database: execute query
Database-->>Adapter: return results
Adapter-->>Paginator: return results
Paginator-->>Client: return page results
Parameters:
Name | Type | Description |
---|---|---|
adapter |
Adapter.<any, Q, any, any>
|
The database adapter to use for executing queries |
query |
Q
|
The query to paginate |
size |
number
|
The number of records per page |
clazz |
Constructor.<M>
|
The constructor for the model type |
Example
// Create a paginator for a user query
const userQuery = db.select().from(User);
const paginator = await userQuery.paginate(10); // 10 users per page
// Get the first page of results
const firstPage = await paginator.page(1);
// Navigate to the next page
const secondPage = await paginator.next();
// Get information about the pagination
console.log(`Page ${paginator.current} of ${paginator.total}, ${paginator.count} total records`);