【问题标题】:Knp Paginator with findAll() method带有 findAll() 方法的 Knp 分页器
【发布时间】:2014-10-04 16:18:38
【问题描述】:

我有一个问题,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>

问候迈克尔

【问题讨论】:

  • 我几乎有同样的问题。我无法直接对我的实体进行分页,而无需构建某种新查询。我的意思是我已经有了我喜欢的查询和实体用法,我只是想为其添加分页,而文档仅显示了如何以一种方式进行操作..正如您的问题所表明的那样..奇怪的是,在我的情况下,它正在滴流到这个错误,这是非常错误的引导..我想将它添加到这个主题以提高搜索能力Attempted to call method "getTemplate" on class "Symfony\Component\HttpFoundation\JsonResponse". (500 Internal Server Error)
  • in vendor/knplabs/knp-paginator-bundle/Twig/Extension/PaginationExtension.php at line 56 $template ?: $pagination-&gt;getTemplate(),

标签: php symfony doctrine-orm pagination knppaginator


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    目前 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

    我的两分钱

    【讨论】:

    • 是否也可以对简单的字符串进行分页?
    • 我添加了有关可以分页的文档参考。如果你有一个字符串数组,是的:你可以对它进行分页。你能提供更多关于你的问题的信息吗?
    • 也不能像书一样简单地对长字符串进行分页?什么是关于 ajax 的?对于带有教义查询调用的 ajax 分页站点,最简单的工作流程是怎样的?我不想有完整的教程,只想要如何接近......谢谢。
    • knp 分页器甚至不支持普通数组吗?我从一个存储过程中获取我的数据,然后返回一个数组。
    • 嗨@adiii4 是的,当然,是列表中的第一个。您可能会遇到基于 knp 功能的动态排序问题 (knp_pagination_sortable)
    【解决方案3】:

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

    【讨论】:

    • 用简单的 findAll() 方法也不可能做到吗?
    • 简短的回答是不,你不能。您需要制作自己的存储库方法。
    • 目前分页器可以分页各种类型,详见doc fererence
    • knp 分页器甚至不支持普通数组吗?我从一个存储过程中获取我的数据,然后返回一个数组。
    【解决方案4】:

    你可以试试这个:

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

    【讨论】:

      【解决方案5】:

      你也可以试试这个:

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

      【讨论】:

        猜你喜欢
        • 2019-07-07
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 2019-07-22
        • 2019-03-19
        • 2018-10-25
        • 1970-01-01
        相关资源
        最近更新 更多