*/ final class QueryBuilderPaginator implements PaginatorInterface { /** * @param int<0, max> $results */ public function __construct( private readonly QueryBuilder $queryBuilder, private readonly int $results ) { } public function getNbResults(): int { return $this->results; } /** * @return iterable */ public function getSlice(int $offset, int $length): iterable { /** @var Query $query */ $query = $this->queryBuilder ->getQuery() ->setFirstResult($offset) ->setMaxResults($length); return $this->getResults($query); } /** * @param Query $query * @return iterable */ private function getResults(Query $query): iterable { return $query->execute(); // @phpstan-ignore-line } /** * @return iterable */ public function getAll(): iterable { return $this->getResults($this->queryBuilder->getQuery()); } }