Als u alleen MySQL gaat gebruiken, kunt u profiteren van de FOUND_ROWS()
functie.
Dit vereist het gebruik van native queries, wat hoogstwaarschijnlijk uw vermogen om een andere DB dan MySQL te gebruiken zal belemmeren, maar het werkt redelijk goed in mijn ervaring.
Ik heb zoiets als het volgende met groot succes gebruikt.
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;
}
Nadat ik de resultatenarray van de bovenstaande functie heb gekregen, extraheer ik het element 'foundRows' naar een afzonderlijke variabele, zet het uit (d.w.z. unset($results['foundRows'])
), en ga dan door met het normaal gebruiken van de array.
Ik hoop dat dit helpt.