Knp Paginator with findAll()方法

时间:2014-10-04 16:18:39

标签: php symfony doctrine-orm pagination 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*/
    );

但不是这样:

    $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>

问候迈克尔

5 个答案:

答案 0 :(得分:6)

$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 );与Knp_paginator兼容,您只需将其提供给您的分页器:

{{1}}

答案 1 :(得分:4)

KNP不支持对数组元素进行排序,如here所述。

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

目前KNP Paginator可以分页:

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

有关详细信息,请参阅doc fererence

我的两分钱

答案 2 :(得分:3)

FindAll返回一个数组。 knp paginator需要一个doctrine查询对象。

答案 3 :(得分:0)

你可以试试这个:

$query = $repository->createQueryBuilder('a');

答案 4 :(得分: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
         ]);
}