如何使用symfony2对搜索结果进行分页?

时间:2015-07-28 01:38:23

标签: php symfony pagination

我正在使用symfony2进行项目。我已经有了我的搜索功能,它已经有效了。但我想要的是对搜索结果进行分页,因为有时会检索到大量数据。我怎么可能这样做?

这是我的代码:

public function searchAction (Request $request) {

        $request = $this->getRequest();
        $data = $request->get('search');

        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery (
            'SELECT a,b,c FROM SampleBundle:transactDetail a
            JOIN a.transact b
            JOIN b.transactType c
            WHERE b.pNumber LIKE :data
            OR b.senderId LIKE :data'
        )
        ->setParameter('data', "%$data%");
        $result = $query->getResult();

        if ($result == null ) {
            return $this->render('SampleBundle:Sample:noresult.html.twig');
        }
        return $this->render('SampleBundle:Sample:search.html.twig', array('result' => $result));
    }

提前致谢。

1 个答案:

答案 0 :(得分:0)

这是使用Paginator的代码示例:

public function searchAction(Request $request, $firstResult = 0, $maxResults = 100)
{
    $request = $this->getRequest();
    $data = $request->get('search');

    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
        'SELECT a,b,c FROM SampleBundle:transactDetail a
            JOIN a.transact b
            JOIN b.transactType c
            WHERE b.pNumber LIKE :data
            OR b.senderId LIKE :data'
    )
        ->setParameter('data', "%$data%")
        ->setFirstResult($firstResult)
        ->setMaxResults($maxResults);

    $result = new Paginator($query);

    if ($result == null) {
        return $this->render('SampleBundle:Sample:noresult.html.twig');
    }

    return $this->render('SampleBundle:Sample:search.html.twig', array('result' => $result));
}

如果您想计算总数count($result); Paginator具有Countable和IteratorAggregate接口 所以你可以毫无问题地循环你的结果。

相关问题