/** * Returns paginated content * * If the $queryBuilder for entities does include a grouping function, the automatic counting will fail (since * sub selects are not fully supported in DQL). You can pass an additional query builder just for the counting query * in $countQueryBuilder then (no need to set the select("COUNT(..)"), as this will be done automatically). * * @param QueryBuilder $queryBuilder The query builder to retrieve the entities * @param Pagination $pagination The pagination object * @param QueryBuilder|null $countQueryBuilder The additional query builder, just for the count query * @param int|null $forceCount if given, forces the count to be this exact value * * @return PaginatedList */ protected function getPaginatedResults(QueryBuilder $queryBuilder, Pagination $pagination, QueryBuilder $countQueryBuilder = null, $forceCount = null) { $pagination->setNumberOfItems($this->getTotalNumberOfItems($queryBuilder, $countQueryBuilder, $forceCount)); $offset = ($pagination->getCurrentPage() - $pagination->getMinPage()) * $pagination->getItemsPerPage(); if (0 < $pagination->getNumberOfItems()) { $queryBuilder->setFirstResult($offset)->setMaxResults($pagination->getItemsPerPage()); $list = iterator_to_array(new Paginator($queryBuilder->getQuery())); } else { $list = array(); } return new PaginatedList($list, $pagination); }
/** * Tests for items per page, set in setter */ public function testItemsPerPageSetter() { $pagination = new Pagination(1, 25); $pagination->setItemsPerPage(5); $this->assertSame(5, $pagination->getItemsPerPage()); }