我需要管理使用jQuery DataTables显示来自Doctrine Paginator查询的大量记录。现在,我正在寻找执行此任务的最佳方法。
就性能而言,最好在数据库级别对结果进行分页,这样可以避免将结果映射到对象的开销,减少网络流量,并且数据库服务器不需要读取/过滤那么多记录[ ...] @ {xocoatzin this comment
我编写了一个Symfony控制器操作来从数据库中检索帐户的数据:
的的AccountController
/**
* 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模板,其中有一个用于填充我的表。
我还发现this gist用于Symfony2 / DataTables集成。
我正在使用:
我为Symfony找到了几个paginator捆绑包,但我的目的是保持一个简单的方法从头开始只使用Doctrine paginator,所以我将来可以在不依赖第三方组件的情况下进行更改。我认为兼容性和解耦性也会更好。
Paginator Symfony组件: