每页300个元素中,Knppaginator仅加载50个结果



我有一个查询来搜索所有元素,并使用Paginator显示它们。我有一个控制器,我可以在这里制作knppaginator。

当我加载页面时,它加载了所有300个元素,然后将它们切成10个页面。

我才能实际上只能加载50 x 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 KnpComponentPagerPaginator
     */
    $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()
    ;
}

所以我可以为此创建一个新的查询?

您执行查询。我建议构建查询并将其馈送到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可以通过查询处理分页,并且不会很重。

希望会有所帮助。

最新更新