Improve Doctrine ORM support / thanks @Stof for the fancy count code

This commit is contained in:
ornicar 2011-05-09 14:17:38 -07:00
parent a800289481
commit 71314264f4
3 changed files with 29 additions and 8 deletions

View file

@ -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()
{

View file

@ -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']}();
}
}

View file

@ -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']}();
}
}