Doctrine2 и SQL_CALC_FOUND_ROWS

Озадачился проблемой выборки полного кол-ва полученных строк в Doctrine2 используя MySQL выражение SQL_CALC_FOUND_ROWS и оказалось, что сделать это можно, но не каждым из предложенных Doctrine2 способов.

Первым делом я начал гуглить и увидел, что кто-то несколько лет тому назад на хабре делал это используя Doctrine 2 Custom AST Walkers (на гитхабе), но который никак не хочет работать и выдает ошибку. Далее я попробовал сделать так:

$query = $em->createQuery('SELECT SQL_CALC_FOUND_ROWS p
FROM AcmeSecurityBundle:Comment p
WHERE p.parentId = 0 AND p.companyId = :companyId'  LIMIT 5
)->setParameter('companyId', $companyId);

$comments1 = $query->getResult();

но не вышло, Doctrine2 просто выругался. А вот следующие варианты прошли на ура:

$stmt = $em->getConnection()->prepare('SELECT SQL_CALC_FOUND_ROWS * FROM Comment
WHERE companyId = '.(int)$companyId.' AND parentId = 0 LIMIT 5');
$stmt->execute();
$comments2 = $stmt->fetchAll();// получаем массив массивов

или 

$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addEntityResult('\Acme\SecurityBundle\Entity\Comment', 'c');
$rsm->addFieldResult('c', 'id', 'id');// указываем имя первого поля
$query = $em->createNativeQuery('SELECT SQL_CALC_FOUND_ROWS * FROM Comment
WHERE companyId = ? AND parentId = ? LIMIT 5', $rsm);
$query->setParameters(array($companyId,0));
$comments3 = $query->getResult();// получаем массив объектов 

Кстати, оказывается, что на текущий момент (25.10.2014) - Doctrine2 уже поддерживает MySQL-функцию FOUND_ROWS():

$stmt = $em->getConnection()->prepare('SELECT FOUND_ROWS()');
$stmt->execute();
$commentsCount = $stmt->fetchColumn();

Удачи господа и не изобретайте лишних вело-драйверов и лишних Doctrine2-функций.

Оцени публикацию:
  • 1,5
Оценили человек: 1
Теги : Doctrine2, MySQL, SQL_CALC_FOUND_ROWS, FOUND_ROWS

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » PHP »