我需要使用 jQuery DataTables 管理来自 Doctrine Paginator 查询的大量记录的显示。现在,我正在寻找完成此任务的最佳方法。
在性能方面,最好在数据库级别对结果进行分页,这样您就可以避免将结果映射到对象的开销,减少网络流量,并且您的数据库服务器不需要读取/过滤那么多记录 [...] @Xocoatzin此评论
我已经编写了一个Symfony控制器操作来从数据库中检索帐户的数据:
帐户控制器
/**
* Lists all Account entities.
*
* @Route("/list/{page}", defaults={"page" = 1}, name="account_index")
* @Template("account/index.html.twig")
* @Method("GET")
*/
public function indexAction($page)
{
$limit = 15;
$offset = ($page - 1) * $limit;
$accountRepo = $this->getDoctrine()->getRepository('SupportBundle:Account');
$query = $accountRepo->createQueryBuilder('a')
->setFirstResult($offset)
->setMaxResults($limit)
->getQuery();
$paginator = new Paginator($query);
dump((int )$paginator->count());
$total = (int) ceil($paginator->count() / $limit);
dump($total);
$accounts = $query->getResult();
return array(
'accounts' => $accounts,
'title' => 'Accounts list',
'paginator' => $paginator->getIterator(),
'pages' => $total,
'current_page' => $page
);
}
为了渲染视图,我实现了一个简单的 Twig 模板,其中包含一个填充我的表格。
我也找到了Symfony2/DataTables集成的要点。
我正在使用:
- Symfony 2.8.2
- j查询 1.12
- 数据表 1.10.8
我为Symfony找到了几个分页器包,但我的目的是保持一个简单的方法,从头开始,只有Doctrine分页器,所以我将来可以在不依赖第三方组件的情况下进行更改。我认为兼容性和解耦也会更好。
分页器Symfony组件:
- KnpPaginatorBundle
Symfony2 有几个捆绑包:
https://github.com/AliHichem/AliDatatableBundle
和
https://github.com/stwe/DatatablesBundle(我是维护者(