public function testCountAfterSlice() { $dql = "SELECT u FROM Pagerfanta\\Tests\\Adapter\\DoctrineORM\\User u"; $query = $this->entityManager->createQuery($dql); $adapter = new DoctrineORMAdapter($query); $adapter->getSlice(0, 1); $this->assertEquals(2, $adapter->getNbResults()); }
/** * @ApiDoc(description="List of photos with possibility filtering by tags.", resource=true) * * @Rest\QueryParam(name="page", requirements="\d+", default="1", description="Page number.") * @Rest\QueryParam(name="tags", requirements=".+", map=true, description="Tags for filtering.") * @Rest\View(template="@TestTaskPhotos/Api/getPhotos.html.twig") */ public function getPhotosAction($page, array $tags = null) { $doctrine = $this->getDoctrine(); $tags = (array) $tags; if ($tags) { $tags = $doctrine->getRepository('TestTaskTagsBundle:Tag')->findBy(array('title' => $tags)); } $photoRepository = $doctrine->getRepository('TestTaskPhotosBundle:Photo'); $qb = $photoRepository->getPhotosQb($tags); $innerAdapter = new DoctrineORMAdapter($qb, false); // wrap adapter for getting possibility load tags as primitives $adapter = new CallbackAdapter(function () use($innerAdapter) { return $innerAdapter->getNbResults(); }, function ($offset, $length) use($innerAdapter, $photoRepository) { $results = $innerAdapter->getSlice($offset, $length); $photoRepository->attachTagsToPhotos(iterator_to_array($results)); return $results; }); $pagerfanta = (new Pagerfanta($adapter))->setMaxPerPage(10)->setCurrentPage($page ?: 1); return new PhotosCollection($pagerfanta); }
public function testItShouldAcceptAQueryBuilder() { $queryBuilder = $this->entityManager->createQueryBuilder()->select('u')->from('Pagerfanta\\Tests\\Adapter\\DoctrineORM\\User', 'u'); $adapter = new DoctrineORMAdapter($queryBuilder); $this->assertSame(2, $adapter->getNbResults()); $slice = $adapter->getSlice(0, 10); $this->assertSame(2, count($slice)); $users = array($this->user1, $this->user2); $userClass = 'Pagerfanta\\Tests\\Adapter\\DoctrineORM\\User'; foreach ($users as $key => $user) { $this->assertInstanceOf($userClass, $slice[$key]); $this->assertSame($user->id, $slice[$key]->id); } }
public function testCaseBasedQuery() { if (version_compare(\Doctrine\ORM\Version::VERSION, '2.2.0-DEV', '<')) { $this->markTestSkipped('Only recent orm version can test against this query.'); } $dql = <<<DQL SELECT p, CASE WHEN p.name LIKE :keyword AND p.biography LIKE :keyword THEN 0 WHEN p.name LIKE :keyword THEN 1 WHEN p.biography LIKE :keyword THEN 2 ELSE 3 END AS relevance FROM Pagerfanta\\Tests\\Adapter\\DoctrineORM\\Person p WHERE ( p.name LIKE :keyword OR p.biography LIKE :keyword ) GROUP BY p.id ORDER BY relevance ASC, p.id DESC DQL; $query = $this->entityManager->createQuery($dql); $query->setParameter('keyword', '%Foo%'); $adapter = new DoctrineORMAdapter($query); $this->assertEquals(1, $adapter->getNbResults()); $items = $adapter->getSlice(0, 10); $this->assertEquals('Foo', $items[0][0]->name); $this->assertEquals(1, $items[0]['relevance']); }
/** * @inheritdoc */ public function getPartialResult(Pagination $pagination) { $pager = new DoctrineORMAdapter($this->queryBuilder); $pageSize = $pagination->getPageSize(); return new Result($pager->getSlice($pagination->calculateOffset(), $pageSize)->getArrayCopy(), $pager->getNbResults(), $pagination->getPageNumber(), $pageSize); }
/** * (non-PHPdoc) * @see \Pagerfanta\Adapter\DoctrineORMAdapter::getSlice() */ public function getSlice($offset, $length) { $results = parent::getSlice($offset, $length); return new \ArrayIterator(array_map($this->modifier, iterator_to_array($results))); }