2017-09-13 2 views
0

Ich habe eine Abfrage, die nach allen Elementen sucht und sie mit einem Paginator anzeigt. Und ich habe einen Controller, wo ich KnpPaginator funktioniert.KnpPaginator nur 50 Ergebnisse von 300 Elementen pro Seite laden

Wenn ich meine Seiten lade, werden alle 300 Elemente geladen und danach in 10 für jede Seite geschnitten.

Wie kann ich tatsächlich nur 50 von 50 laden, ohne alle zu laden und sie in meiner Paginierung in Ordnung zu haben?

Mein Controller

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); 
} 

Die Abfrage

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() 
    ; 
} 

So kann ich vielleicht eine neue Abfrage für das schaffen?

Antwort

1

Sie führen die Abfrage aus. Ich würde vorschlagen, die Abfrage zu erstellen und sie an KNPPaginatorBundle für weitere Manipulation für Seitenumbruch zu füttern. Daher Repository wird:

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; 
} 

Auf diese Weise können KNP die Paginierung durch Abfrage handhaben, und es wird nicht schwer sein.

Hoffe, dass hilft.

+0

Hallo, danke für die Klarstellung, ich sehe es jetzt besser :) Wie kann ich nach dem KNP damit umgehen? in der Steuerung? –

+0

Nichts anderes benötigt. Dir geht es gut. Probiere es einfach aus. – Jeet

+0

ok werde es versuchen, danke, werde Sie wissen lassen, ob es funktioniert –

Verwandte Themen