Back to Documentation
API Reference

⚙️Pagination Reference

Pagination is built into the QueryBuilder and Model. No extra package needed.

Overview#

Pagination is built into the QueryBuilder and Model. No extra package needed.

php
// Model
$products = Product::paginate(20, $page);

// QueryBuilder
$products = Product::query()
    ->where('price', '>', 100)
    ->orderBy('created_at', 'DESC')
    ->paginate(20, $page);

Response Format#

json
{
    "success": true,
    "data": [
        { "id": 1, "name": "Product 1" },
        { "id": 2, "name": "Product 2" }
    ],
    "meta": {
        "page": 1,
        "per_page": 20,
        "total": 150,
        "last_page": 8
    }
}

Controller Usage#

php
class ProductController extends Controller
{
    public function index(Request $request): Response
    {
        $page = max(1, $request->queryInt('page', 1));
        $perPage = min(100, max(1, $request->queryInt('per_page', 20)));

        $result = Product::query()
            ->where('status', 'active')
            ->orderBy('created_at', 'DESC')
            ->paginate($perPage, $page);

        return $this->paginated(
            ProductResource::collection($result['data']),
            $result['meta'],
            'Products retrieved',
        );
    }
}

With Resources#

php
$result = $this->service->getAll($page, $perPage);

return $this->paginated(
    UserResource::collection($result['data']),
    $result['meta'],
    'Users retrieved',
);

Meta Structure#

php
$meta = $result['meta'];
// [
//   'page'      => 1,      // Current page
//   'per_page'  => 20,     // Items per page
//   'total'     => 150,    // Total items
//   'last_page' => 8,      // Last page number
// ]

Available Methods#

MethodDescription
Model::paginate(perPage, page)Paginate model query
QueryBuilder::paginate(perPage, page)Paginate builder query
Controller::paginated(data, meta, message)Return paginated response
Response::paginated(data, meta, message)Static paginated response