Skip to main content
Version: Next

Paginating large result sets

It is quite common to have to paginate over large result sets.

GraphQLite offers a simple way to do that using Porpaginas.

Porpaginas is a set of PHP interfaces that can be implemented by result iterators. It comes with a native support for PHP arrays, Doctrine and TDBM.

If you are a Laravel user, Eloquent does not come with a Porpaginas iterator. However, the GraphQLite Laravel bundle comes with its own pagination system.

Installation

You will need to install the Porpaginas library to benefit from this feature.

$ composer require beberlei/porpaginas

Usage

In your query, simply return a class that implements Porpaginas\Result:

class MyController
{
/**
* @return Product[]
*/
#[Query]
public function products(): Porpaginas\Result
{
// Some code that returns a list of products

// If you are using Doctrine, something like:
return new Porpaginas\Doctrine\ORM\ORMQueryResult($doctrineQuery);
}
}

Notice that:

  • the method return type MUST BE Porpaginas\Result or a class implementing Porpaginas\Result
  • you MUST add a @return statement to help GraphQLite find the type of the list

Once this is done, you can paginate directly from your GraphQL query:

products {
items(limit: 10, offset: 20) {
id
name
}
count
}

Results are wrapped into an item field. You can use the "limit" and "offset" parameters to apply pagination automatically.

The "count" field returns the total count of items.