【发布时间】:2012-09-28 21:43:57
【问题描述】:
我想用至少 2 个左连接对复杂请求进行分页,但我使用的分页包 (KnpPaginationBundle) 无法告诉 Doctrine 如何计算结果 (which is needed for the pagination process),并继续出现此异常.
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 */
);
关于如何对复杂请求进行分页的任何想法,我很确定这种用例很常见,不想在分页后补充我的结果。
【问题讨论】:
-
Pagerfanta 的理论 ORM 适配器应该能够处理奇怪的查询。 github.com/whiteoctober/Pagerfanta
-
这个查询并不奇怪,我相信有一种方法可以简单地使用 knp 分页器,也许我应该更深入地了解一下 knp 分页器
-
我正面临这个问题..有什么解决办法吗?
-
那个特定的错误信息来自
Doctrine\ORM\Tools\Pagination\CountWalker
标签: symfony doctrine-orm pagination