如何正确使用带有Doctrine paginator的jQuery DataTables?

时间:2016-02-17 07:50:29

标签: jquery symfony doctrine-orm pagination

我需要管理使用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 2.8.2
  • jQuery 1.12
  • DataTables 1.10.8

我为Symfony找到了几个paginator捆绑包,但我的目的是保持一个简单的方法从头开始只使用Doctrine paginator,所以我将来可以在不依赖第三方组件的情况下进行更改。我认为兼容性和解耦性也会更好。

Paginator Symfony组件

1 个答案:

答案 0 :(得分:1)

Symfony2有一些捆绑包:

https://github.com/AliHichem/AliDatatableBundle

https://github.com/stwe/DatatablesBundle(我是维护者)