2011-05-09 18:48:25 +02:00
|
|
|
<?php
|
|
|
|
|
2011-05-10 00:31:20 +02:00
|
|
|
namespace FOQ\ElasticaBundle\Doctrine\ORM;
|
2011-05-09 18:48:25 +02:00
|
|
|
|
2011-05-10 00:31:20 +02:00
|
|
|
use FOQ\ElasticaBundle\Doctrine\AbstractProvider;
|
|
|
|
|
|
|
|
class Provider extends AbstractProvider
|
2011-05-09 18:48:25 +02:00
|
|
|
{
|
|
|
|
/**
|
|
|
|
* Counts the objects of a query builder
|
|
|
|
*
|
2011-05-09 19:56:27 +02:00
|
|
|
* @param queryBuilder
|
2011-05-09 18:48:25 +02:00
|
|
|
* @return int
|
|
|
|
**/
|
|
|
|
protected function countObjects($queryBuilder)
|
|
|
|
{
|
2011-05-09 23:17:38 +02:00
|
|
|
$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();
|
2011-05-09 18:48:25 +02:00
|
|
|
}
|
2011-05-09 19:56:27 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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);
|
|
|
|
|
2011-05-09 23:17:38 +02:00
|
|
|
return $queryBuilder->getQuery()->getResult();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates the query builder used to fetch the documents to index
|
|
|
|
*
|
|
|
|
* @return query builder
|
|
|
|
**/
|
|
|
|
protected function createQueryBuilder()
|
|
|
|
{
|
2011-07-02 17:52:40 +02:00
|
|
|
return $this->objectManager->getRepository($this->objectClass)->{$this->options['query_builder_method']}('a');
|
2011-05-09 19:56:27 +02:00
|
|
|
}
|
2011-05-09 18:48:25 +02:00
|
|
|
}
|