我有一个查询,它搜索所有元素并使用分页器显示它们。我有一个控制器,我使KnpPaginator工作。
当我加载我的页面时,它会加载所有的300个元素,然后将每个页面分割成10个元素。
我如何才能实际加载50乘50,而不加载所有,并使它们在我的分页顺序?
我的控制器
private function resultsAction(User $user, $type, $archive, Request $request)
{
$em = $this->getDoctrine()->getManager();
// $results = $em->getRepository("STUserBundle:Operation")->setQueryByTypeAndPro($type, $user, $archive);
$dql = "SELECT opn FROM STuserBundle:Operation opn";
$query = $em->createQuery($dql);
/**
* @var $paginator \Knp\Component\Pager\Paginator
*/
$paginator = $this->get('knp_paginator');
$results = $paginator->paginate(
$query,
$request->query->getInt('page',1),
$request->query->getInt('limit',50)
);
return array("results" => $results, "archive" => $archive);
}查询
public function findByTypeAndPro($type, User $user, $archive)
{
return $this->createQueryBuilder("opn")
->andWhere("opn.type = :type")
->setParameter("type", $type)
->andWhere("opn.resellerId = :reseller")
->setParameter("reseller", $user->getId())
->andWhere("opn.archive = :archive")
->setParameter('archive', $archive)
->orderBy("opn.dateCreation", "DESC")
->getQuery()
->getResult()
;
}所以我可以为此创建一个新的查询吗?
发布于 2017-09-13 07:41:49
执行查询。我建议构建该查询并将其提供给KNPPaginatorBundle以进一步操作分页。因此,您的存储库变成:
public function findByTypeAndPro($type, User $user, $archive)
{
$qb = $this->createQueryBuilder("opn")
->andWhere("opn.type = :type")
->setParameter("type", $type)
->andWhere("opn.resellerId = :reseller")
->setParameter("reseller", $user->getId())
->andWhere("opn.archive = :archive")
->setParameter('archive', $archive)
->orderBy("opn.dateCreation", "DESC")
;
return $qb;
}这样,KNP就可以通过查询处理分页,而且不会太重。
希望这能有所帮助。
https://stackoverflow.com/questions/46190987
复制相似问题