Я хотел бы разбивать сложный запрос, по крайней мере, на два левых соединения, но пакет разбиения на страницы, который я использую (KnpPaginationBundle), не может сказать Doctrine, как подсчитать результат (который необходим для процесса разбиения на страницы) и сохраняйте это исключение.
Cannot count query which selects two FROM components, cannot make distinction
Вот пример запроса, построенного с помощью Doctrine QueryBuilder.
public function findGroupsByUser(User $user, $listFilter, $getQuery = false, $order = 'ASC')
{
$query = $this->createQueryBuilder('r')
->select('r as main,g')
->select('r as main,g, count(gg) as members')
->leftjoin('r.group', 'g')
->innerjoin('MyBundle:GroupMemberRel', 'gg', 'WITH', 'r.group = gg.group')
->addGroupBy('g.groupId')
->add('orderBy', 'g.name ' . $order);
if ($getQuery == true) {
return $query;
}
return $query->getQuery()->getResult();
}
Затем я передаю этот запрос службе knp_paginator, а затем у меня есть исключение
$groupQuery = $this->em->getRepository('MyBundle:GroupMemberRel')->findGroupsByUser($user, $listFilter, true);
$paginator = $this->container->get('knp_paginator');
/* @var $groups Knp\Component\Pager\Pagination\PaginationInterface */
$groups = $paginator->paginate(
$groupQuery, $this->container->get('request')->query->get('page', 1), 10 /* limit per page */
);
Любая идея о том, как разбивать страницы на сложный запрос, я вполне уверен, что этот прецедент распространен, не хочу гидратировать мой результат после разбивки на страницы.