带有 findAll() 方法的 Knp 分页器

Posted

技术标签:

【中文标题】带有 findAll() 方法的 Knp 分页器【英文标题】:Knp Paginator with findAll() method 【发布时间】: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(), 【参考方案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
         ]);

【讨论】:

以上是关于带有 findAll() 方法的 Knp 分页器的主要内容,如果未能解决你的问题,请参考以下文章

knp 分页器仅适用于数组

如何在 Twig 中为 KNP 分页器获取分页方向?

排序在 Knp 分页器中不起作用

有没有办法让 knp 分页器只显示下一个和上一个按钮

如何将参数附加到 KNP 分页器 url

KNP 分页链接卡在第 1 页