我正在使用 paginate 对一个非常大的实体集合进行分页,在对性能不满意之后,我意识到它们将获取所有实体,不管传递的是什么页码,我检查了查询分析器,并且在查询中从未见过任何偏移。无论如何,这就是我发现的工作方法,但我想将获取计数和实体的部分移回存储库类,在存储库类中,我希望使用createQueryBuilder。
public function indexAction(Request $request)
{
$page = $request->get('p', 1);
$this->breadcrumbs(
array(
array('title'=>'Admin','path'=>'home'),
array('title'=>'Customers','path'=>'customers'),
array('title'=>'All'),
)
);
$em = $this->getDoctrine()->getManager();
$count = $em
->createQuery('SELECT COUNT(cb) FROM MWCoreBundle:ContactsBasics cb LEFT JOIN cb.login l LEFT JOIN cb.setting s')
->getSingleScalarResult()
;
$entities = $em
->createQuery('SELECT cb,l,s FROM MWCoreBundle:ContactsBasics cb LEFT JOIN cb.login l LEFT JOIN cb.setting s ORDER BY cb.dateAdded DESC')
->setHint('knp_paginator.count', $count);
$pagination = $this->get('knp_paginator')->paginate($entities, $page, 50, array('distinct' => false));
return $this->render('MWCoreBundle:ContactsBasics:index.html.twig', array(
'entities' => $entities,
'pagination' => $pagination,
));
}发布于 2015-04-19 04:37:35
否,knp分页器,运行三个查询:
清点物品:
SELECT
count(DISTINCT u0_.id) AS sclr_0
FROM
users u0通过偏移获取不同的ids
SELECT
DISTINCT u0_.id AS id_0
FROM
users u0_
LIMIT
10 OFFSET 0按ids获取项目:
SELECT
*
FROM
users u0_
WHERE
u0_.id IN (?)https://stackoverflow.com/questions/29724180
复制相似问题