如何正确使用 jQuery DataTables 和 Doctrine 分页器



我需要使用 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(我是维护者(

最新更新