यदि आप केवल MySQL का उपयोग कर रहे हैं, तो आप इसके FOUND_ROWS()
समारोह।
इसके लिए मूल प्रश्नों का उपयोग करने की आवश्यकता होगी, जो संभवतः 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'])
), और फिर सामान्य रूप से सरणी का उपयोग जारी रखें।
आशा है कि यह मदद करता है।