FOSElasticaBundle/Provider/DoctrineORMProvider.php

52 lines
1.4 KiB
PHP
Raw Normal View History

<?php
namespace FOQ\ElasticaBundle\Provider;
class DoctrineORMProvider extends AbstractDoctrineProvider
{
/**
* Counts the objects of a query builder
*
* OMG this implementation is radical. Yes. There seems to be
* no easy way to do that with Doctrine ORM 2.0.
* Please tell me if you have a better idea.
*
* @param queryBuilder
* @return int
**/
protected function countObjects($queryBuilder)
{
$qb = clone $queryBuilder;
$qb->select($qb->expr()->count($queryBuilder->getRootAlias()))
->resetDQLPart('orderBy'); // no need to order the query. It does not change the count and make the query less efficient.
return $qb->getQuery()->getSingleScalarResult();
}
/**
* Fetches a slice of objects
*
* @param queryBuilder
* @param int limit
* @param int offset
* @return array of objects
**/
protected function fetchSlice($queryBuilder, $limit, $offset)
{
$queryBuilder->setFirstResult($offset);
$queryBuilder->setMaxResults($limit);
return $queryBuilder->getQuery()->getResult();
}
/**
* Creates the query builder used to fetch the documents to index
*
* @return query builder
**/
protected function createQueryBuilder()
{
return $this->objectManager->getRepository($this->objectClass)->{$this->options['query_builder_method']}();
}
}