我遇到问题,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>
问候迈克尔
答案 0 :(得分:6)
$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
);
与Knp_paginator兼容,您只需将其提供给您的分页器:
{{1}}
答案 1 :(得分:4)
KNP不支持对数组元素进行排序,如here所述。
更好地在数据库级别提取和排序数据。在第二个示例中,您从表中获取所有数据(并且可以更大),然后您在分页器处要求限制它们。这不好。因此,最好使用查询来完成此工作,并让我们管理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
为元素的数组有关详细信息,请参阅doc fererence
我的两分钱答案 2 :(得分:3)
FindAll返回一个数组。 knp paginator需要一个doctrine查询对象。
答案 3 :(得分:0)
你可以试试这个:
$query = $repository->createQueryBuilder('a');
答案 4 :(得分:0)
您也可以尝试:
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
]);
}