Improve Doctrine ORM support / thanks @Stof for the fancy count code
This commit is contained in:
parent
a800289481
commit
71314264f4
|
@ -85,14 +85,11 @@ abstract class AbstractDoctrineProvider implements ProviderInterface
|
|||
protected abstract function fetchSlice($queryBuilder, $limit, $offset);
|
||||
|
||||
/**
|
||||
* Creates the query buider used to fetch the documents to index
|
||||
* Creates the query builder used to fetch the documents to index
|
||||
*
|
||||
* @return Query
|
||||
* @return query builder
|
||||
**/
|
||||
protected function createQueryBuilder()
|
||||
{
|
||||
return $this->objectManager->getRepository($this->objectClass)->{$this->options['query_builder_method']}();
|
||||
}
|
||||
protected abstract function createQueryBuilder();
|
||||
|
||||
protected function extractTypeFields()
|
||||
{
|
||||
|
|
|
@ -27,4 +27,14 @@ class DoctrineMongoDBProvider extends AbstractDoctrineProvider
|
|||
{
|
||||
return $queryBuilder->limit($limit)->skip($offset)->getQuery()->execute()->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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']}();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,11 @@ class DoctrineORMProvider extends AbstractDoctrineProvider
|
|||
**/
|
||||
protected function countObjects($queryBuilder)
|
||||
{
|
||||
return PHP_INT_MAX;
|
||||
$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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,6 +36,16 @@ class DoctrineORMProvider extends AbstractDoctrineProvider
|
|||
$queryBuilder->setFirstResult($offset);
|
||||
$queryBuilder->setMaxResults($limit);
|
||||
|
||||
return $queryBuilder->getQuery()->getArrayResult();
|
||||
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']}();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue