У меня есть простой запрос, который выбирает сущности и использует оператор предельных значений. Я использую Doctrine NativeQuery, потому что у меня есть функция FIELD() в sql-запросе, и в результате мне нужен набор объектов. Этот запрос работает.Получить общее количество строк с помощью «SQL_CALC_FOUND_ROWS» и Doctrine NativeQuery
Однако мне нужно также общее количество записей, поэтому я использую SQL_CALC_FOUND_ROWS
в первом запросе. После первого получения результата я создаю еще один ResultSetMapping, другой $ nativeQuery, выполните SELECT FOUND_ROWS() AS found_rows
, и я получаю общее количество «1».
$rsm = new ResultSetMapping();
$rsm->addEntityResult('\\MyCompany\\Administration\\Domain\\Model\\Applicant\\Applicant', 'a');
$rsm->addFieldResult('a', 'first_name', 'firstName');
$rsm->addFieldResult('a', 'last_name', 'lastName');
$query = $this->em->createNativeQuery('SELECT SQL_CALC_FOUND_ROWS * FROM recruitment_applicant ORDER BY FIELD(id,5,15,8,17,2,1,16,9,7,11,6,10,12,13,14,18)', $rsm);
$result = $query->getResult(); // this result is ok
$sqlCountRows = "SELECT FOUND_ROWS() AS found_rows";
$countRowsRsm = new ResultSetMapping();
$countRowsRsm->addScalarResult('found_rows', 'foundRows');
$countRowsQuery = $this->em->createNativeQuery($sqlCountRows,$countRowsRsm);
$rowsCount = $countRowsQuery->getResult();
$total = $rowsCount[0]['foundRows']; // result is '1' when it should be '16'
Я использовал this пример.