少なくとも 2 つの左結合で複雑なリクエストをページ分割したいのですが、私が使用しているページ分割バンドル (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 */
);
複雑なリクエストでページネーションする方法についてのアイデアは、このユースケースが一般的であると確信しています。ページネーション後に結果を水和したくありません。