6

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>

あいさつマイケル

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 は配列要素の並べ替えをサポートしていません。

データベース レベルでのデータの抽出と並べ替えの改善。2番目の例では、テーブルからすべてのデータを取得し(さらに大きくすることもできます)、ページネーターにそれらを制限するように依頼します。これはうまく機能しません。そのため、クエリを使用してこの作業を行い、ページネーター要素を管理することをお勧めします。

現在、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

詳細については、doc fererenceを参照してください

私の2セント

于 2014-10-05T11:33:57.467 に答える
0

これを試すことができます:

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