Ако ще използвате само MySQL, тогава можете да се възползвате от неговия FOUND_ROWS()
функция.
Това ще изисква използването на собствени заявки, което най-вероятно ще попречи на способността ви да използвате DB, различна от MySQL, но според моя опит работи доста добре.
Използвах нещо като следното с голям успех.
use Doctrine\ORM\Query\ResultSetMapping;
public function getRecentComments($offset, $id) {
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM Comment c
WHERE c.game = ?
ORDER BY c.date DESC
LIMIT ?,3";
$rsm = new ResultSetMapping();
$rsm->addEntityResult('Comment', 'c');
$rsm->addFieldResult('c', 'id', 'id');
$rsm->addFieldResult('c', 'game_id', 'game_id');
$rsm->addFieldResult('c', 'date', 'date');
$query = $this->getEntityManager()->createNativeQuery($dql, $rsm);
$query->setParameters(array(
(int)$id,
(int)$offset
));
$results = $query->getResult();
// Run FOUND_ROWS query and add to results array
$sql = 'SELECT FOUND_ROWS() AS foundRows';
$rsm = new ResultSetMapping();
$rsm->addScalarResult('foundRows', 'foundRows');
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
$foundRows = $query->getResult();
$results['foundRows'] = $foundRows[0]['foundRows'];
return $results;
}
След като получа масива с резултати от горната функция, извличам елемента 'foundRows' в отделна променлива, премахвам го (т.е. unset($results['foundRows'])
), и след това продължете да използвате масива както обикновено.
Надявам се това да помогне.