Knp Paginator with findAll()方法

Slo*_*wie 6 php pagination symfony doctrine-orm knppaginator

我有问题,knp paginator只能这样工作:

    $em    = $this->get('doctrine.orm.entity_manager');
    $dql   = "SELECT a FROM MainArtBundle:Art a";
    $query = $em->createQuery($dql);


    $paginator  = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $query,
        $this->get('request')->query->get('page', 1)    /*page number*/,
        8                                        /*limit per page*/
    );
Run Code Online (Sandbox Code Playgroud)

但不是这样:

    $em         = $this->getDoctrine()->getManager();
    $entities   = $em->getRepository('MainArtBundle:Art')->findAll();

    $paginator  = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $entities,
        $this->get('request')->query->get('page', 1)    /*page number*/,
                                                      /*limit per page*/
    );
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我不明白.

这是我的树枝电话:

<li>{{ knp_pagination_sortable(paginator, 'Oldest', 'a.id', {'direction': 'desc'}) }}</li>
Run Code Online (Sandbox Code Playgroud)

问候迈克尔

Gre*_*gOs 6

findAll() 与Knp_paginator兼容,您只需将它提供给您的paginator:

$query = $em->getRepository('Acme\FOOBundle\Entity\BAR')->findAll();
$paginator = $this->get('knp_paginator');
requests = $paginator->paginate(
    $query,
    $this->get('request')->query->get('page', 1), 
    5
);
Run Code Online (Sandbox Code Playgroud)


Mat*_*teo 5

KNP不支持的数组元素的排序,如所描述这里

在数据库级别更好地提取和排序数据。在您的第二个示例中,您从表中获取所有数据(并且可以更大),然后您要求分页器限制它们。这表现不佳。所以最好使用查询来完成这项工作,并让我们管理分页器元素。

目前 KNP Paginator 可以分页:

  • array
  • Doctrine\ORM\Query
  • Doctrine\ORM\QueryBuilder
  • Doctrine\ODM\MongoDB\Query\Query
  • Doctrine\ODM\MongoDB\Query\Builder
  • Doctrine\Common\Collection\ArrayCollection- 任何学说关系集合,包括 ModelCriteria- Propel ORM 查询
  • 带有Solarium_ClientSolarium_Query_Select作为元素的数组

有关详细信息,请参阅文档参考

我的两分钱