Search code examples
phpdoctrine-ormdoctrinelimit

Doctrine 2 - Get total when using limit via repository


I'm new to Doctrine, and I just could not find a way to get the total number of results when using limit with Criteria (via setMaxResults function) in the EntityRepository::matching method.

In my repository (not an extend of EntityRepository), I'm using the following (I know this is not the optimal code, it is used just to learn Doctrine):

public function getAll($query = null) {
    if ($query instanceof Criteria) {
        $users = $this->em->getRepository('App\Entities\User')->matching($query)->toArray();
    } else {
        $users = $this->em->getRepository('App\Entities\User')->findAll();
    }
    return $users;
}

Now lets say that the Criteria is defined like so:

$query = Criteria::create();
$query->where(Criteria::expr()->contains('username', 'ron'));
$query->setMaxResults(10);

And there are actually more than 10 users that match that.

How can I get the total number of the users that match the criteria?


Solution

  • If you set maxResults to 10, you get 10 results ;).

    Why don't you call getAll() to get all results and apply the MaxResults later?

    //search for Ron's
    $query = Criteria::create();
    $query->where(Criteria::expr()->contains('username', 'ron'));
    
    //check how many Ron's your database can find
    $count = $repo->getAll($query)->count();
    
    //get the first 10 records
    $query->setMaxResults(10);
    $users = $repo->getAll($query);