Knp Paginator с методом findAll ()

У меня проблема, что кнаг-пагинатор работает только так:

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

Привет майкл

6

Решение

KNP не поддерживает сортировку элементов массива, как описано Вот.

Лучше извлекать и сортировать данные на уровне базы данных. Во втором примере вы извлекаете все данные из таблицы (и могут быть больше), а затем просите у paginator ограничить их. Это не очень хорошо. Так что лучше сделать эту работу с запросом, и пусть справиться с элементом 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_Client а также Solarium_Query_Select как элементы

Увидеть док Фереренс для деталей

мои два цента

4

Другие решения

findAll() совместим с Knp_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
);
6

FindAll возвращает массив. Пагинатор knp требует объекта запроса доктрины.

3

Вы можете попробовать это:

$query = $repository->createQueryBuilder('a');
0
По вопросам рекламы [email protected]