我有一张包含数十万个寄存器的表。我正在使用Zend Framework 3和Doctrine 2进行具有搜索功能的分页页面。我的问题是我希望将寄存器总数限制为500,而与搜索参数和分页无关。
在控制器上:
// This will return the result of DQL
$registros = $this->regService->getRegisters($searchParameters);
$adapter = new DoctrineAdapter(new ORMPaginator($registros, false));
$paginator = new Paginator($adapter);
$paginator->setDefaultItemCountPerPage(20);
$paginator->setCurrentPageNumber($page);
return new ViewModel([
'registros' => $paginator
]);
所以,问题是如果我用参数thar搜索得到2千个寄存器,分页将返回所有这些寄存器,我想要做的是限制在500寄存器
谢谢和最好的问候
答案 0 :(得分:0)
从代码中我不太确定你的问题在哪里;缺少getRegisters($param)
的实施。
然而,为了实现分页,你正走在正确的道路上。
尝试以下方法:
$page = $this->params()->fromQuery('page', 1);
$itemsPerPage = $this->params()->fromQuery('itemsPerPage', null);
// I'm assuming your `getRegisters($param)` function returns QueryBuilder object
/** @var QueryBuilder $qb */
$qb = $this->getEntityManager()->createQueryBuilder();
// This query gets everything from Entity "Entity"
$qb->select('shortEntityName')
->from(\Namespace\To\Entity::class, 'shortEntityName');
// Create a Paginator, pass the QueryBuilder as parameter
$paginator = new Paginator(new OrmAdapter(new OrmPaginator($qb)));
// Set the current page (should be received from URL GET request)
$paginator->setCurrentPageNumber($page);
// Set the max items per page, defaulting to max of 500
$paginator->setItemCountPerPage($itemsPerPage ?: 500);
return [
'paginator' => $paginator,
];
除此之外,您还应该在用于分页导航的某个地方使用“分页”部分模板,以便在视图中使用。此模板应该适应您添加不同GET参数的方式,例如第二页为&page=2
,或&itemsPerPage=100
在页面上显示100个项目而不是500个。
根据评论,稍微修改了$paginator
上的最后一项功能。
// If using code above, you can discard getting "itemsPerPage" from URL, no longer required
// Set the current page (should be received from URL GET request)
$paginator->setCurrentPageNumber(($page <= 10) ? $page : 10); // max allowed = 10
// Set the max items per page, defaulting to max of 500
$paginator->setItemCountPerPage(50); // always 50 per page