带有 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->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_Client
和Solarium_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 分页器的主要内容,如果未能解决你的问题,请参考以下文章