Creating Custom Adapters is easy. You can take a look at the available adapters to see how easy it is.
Please see the Pager Contract to learn more.
<?php
use SonsOfPHP\Component\Pager\Adapter\ArrayAdapter;
$adapter = new ArrayAdapter($results);Will take any callable arguments.
<?php
use SonsOfPHP\Component\Pager\Adapter\CallableAdapter;
$adapter = new CallableAdapter(
count: function (): int {
// ...
},
slice: function (int $offset, ?int $length): iterable {
// ...
},
);{% hint style="danger" %}
Requires sonsofphp/pager-doctrine-collections
{% endhint %}
<?php
use Doctrine\Common\Collections\ArrayCollection;
use SonsOfPHP\Bridge\Doctrine\Collections\Pager\ArrayCollectionAdapter;
$collection = new ArrayCollection();
$adapter = new ArrayCollectionAdapter($collection);{% hint style="danger" %}
Requires sonsofphp/pager-doctrine-dbal
{% endhint %}
<?php
use Doctrine\DBAL\Query\QueryBuilder;
use SonsOfPHP\Bridge\Doctrine\DBAL\Pager\QueryBuilderAdapter;
// ...
$adapter = new QueryBuilderAdapter($builder, function (QueryBuilder $builder): void {
$builder->select('COUNT(e.id) as total');
});{% hint style="danger" %}
Requires sonsofphp/pager-doctrine-orm
{% endhint %}
<?php
use Doctrine\ORM\QueryBuilder;
use SonsOfPHP\Bridge\Doctrine\ORM\Pager\QueryBuilderAdapter;
$builder = $repository->createQueryBuilder('e');
$adapter = new QueryBuilderAdapter($builder);