6

我有问题,knp 分页器只能这样工作:

    $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*/
    );

但不是这样:

    $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*/
    );

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

这是我的树枝电话:

<li>{{ knp_pagination_sortable(paginator, 'Oldest', 'a.id', {'direction': 'desc'}) }}</li>

问候迈克尔

4

5 回答 5

8

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
);

于 2015-09-08T09:43:24.567 回答
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_Client带有和Solarium_Query_Select作为元素的数组

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

我的两分钱

于 2014-10-05T11:33:57.467 回答
3

FindAll 返回一个数组。knp 分页器需要一个学说查询对象。

于 2014-10-04T17:31:08.617 回答
0

你可以试试这个:

$query = $repository->createQueryBuilder('a');
于 2016-07-13T17:03:37.410 回答
0

你也可以试试这个:

public function index(PaginatorInterface $paginator, Request $request): Response
{
    $properties = $paginator->paginate(
        $this->repository->findAllVisibleQuery(),
        $request->query->getInt('page', 1),
        10
     );
     return $this->render('pages/property.html.twig',[
         'current_menu'=> 'properties',
         'properties'=> $properties
         ]);
}
于 2020-12-16T21:14:51.917 回答