我正在使用 KnpPaginatorBundle 并且我在 Repository 中使用 QueryBuilder 来选择数据。我不得不将参数sort和direction放在变量$sort和$direction中,并将它们传递给 Query 以便能够执行和orderBy。
此代码有效,但我想向您展示它,并且如果它是使用 KnpPaginatorBundle 执行此操作的好方法或者 knpPaginatorBundle 提供了另一种更好的方法,请发表您的意见。
我可以将这些参数直接传递给不在 queryBuilder 中的 knp_paginator 吗?
Action
public function listAction($page, Request $request)
{
$em = $this->getDoctrine()->getManager();
$paginator = $this->get('knp_paginator');
if($request->query->get('sort') and $request->query->get('direction')) {
$sort = $request->query->get('sort') ;
$direction = $request->query->get('direction');
}
else{
$sort = 'id'; // set default sort
$direction = 'asc'; // set default direction
}
// pass those two variables to query
$listTravels = $em->getRepository('ProjectTravelBundle:Travel')->getListTravelsFrontend($sort, $direction);
$pagination = $paginator->paginate(
$listTravels,
$this->get('request')->query->get('page', $page)/*page number*/,
10/*limit per page*/
);
return $this->render('ProjectFrontendBundle:Frontend:list.html.twig',array(
'pagination' => $pagination
));
}
旅游资料库:
public function getListTravelsFrontend($sort, $direction) // parameters $sort, $direction
{
$qb = $this->createQueryBuilder('t')
->leftJoin('t.image', 'i')
->addSelect('i')
->leftJoin('t.agence', 'a')
->addSelect('a')
->Where('t.enabled = 1')
->orderBy('t.'.$sort, $direction); // orderBy with those parameters
return $qb->getQuery()->getResult();
}