首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将KnpPaginator手动计数移到Repository类?

如何将KnpPaginator手动计数移到Repository类?
EN

Stack Overflow用户
提问于 2015-04-18 23:46:49
回答 1查看 1.2K关注 0票数 3

我正在使用 paginate 对一个非常大的实体集合进行分页,在对性能不满意之后,我意识到它们将获取所有实体,不管传递的是什么页码,我检查了查询分析器,并且在查询中从未见过任何偏移。无论如何,这就是我发现的工作方法,但我想将获取计数和实体的部分移回存储库类,在存储库类中,我希望使用createQueryBuilder

代码语言:javascript
复制
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,
    ));
}
EN

回答 1

Stack Overflow用户

发布于 2015-04-19 04:37:35

否,knp分页器,运行三个查询:

  1. 计数项目
  2. 通过偏移获取不同的ids
  3. 按ids获取项目

清点物品:

代码语言:javascript
复制
SELECT 
  count(DISTINCT u0_.id) AS sclr_0 
FROM 
  users u0

通过偏移获取不同的ids

代码语言:javascript
复制
SELECT 
    DISTINCT u0_.id AS id_0 
FROM 
  users u0_ 
LIMIT 
  10 OFFSET 0

按ids获取项目:

代码语言:javascript
复制
SELECT 
    *
FROM 
  users u0_ 
WHERE 
  u0_.id IN (?)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29724180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档