e2k/cursor-pagination-bundle
OFFSET-based pagination (O(n) complexity) with cursor-based (O(1)), critical for deep pagination (e.g., analytics dashboards, infinite scroll). Aligns with modern API design (e.g., GraphQL, REST with cursor support).eq, gt, in) enables complex querying without raw SQL, reducing business logic leakage into repositories.CursorFieldDefinition/FieldDefinition). Existing repositories can be incrementally updated.ORDER BY clauses. Test with large datasets to validate query plan.createdAt, id) be chosen? Are they unique and monotonically increasing?createdAt values)?nextCursor, previousCursor fields).OFFSET-based pagination; migrate repositories incrementally.CursorQueryFactory and define cursor/filterable fields.$query->addCursorField(new CursorFieldDefinition('id', 'u.id', 'integer'));
$query->addFilterableField(new FieldDefinition('role', 'u.role'));
cursor and limit params, return CursorResult (e.g., data, nextCursor, hasNextPage).$result = $repository->findPageByCursor($request->query->all(), 20);
return $this->json($result->toArray());
page/limit with cursor/limit in frontend requests.OFFSET pagination.OFFSET-based APIs.400 Bad Request with details).| Failure | Impact | Mitigation |
|---|---|---|
| Invalid cursor | Returns empty page or error | Validate cursors in API layer |
| Missing cursor field | Query fails | Default fallback (e.g., null cursor) |
| Malformed filter DSL | SQL error or incorrect results | Input sanitization/validation |
| Unindexed cursor fields | Slow queries | Add DB indexes for cursor fields |
| Concurrent modifications | Stale cursors | Use transactions or optimistic locking |
OFFSET.id + createdAt").gt, in).How can I help you explore Laravel packages today?