Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai suivi la doc pour utiliser le PAGINATOR à la façon de l'exemple ALBUM
Je vois que le PAGINATOR tel que je l'utilise génère deux requêtes...
La première :
SELECT COUNT(1) AS `c` FROM (SELECT `posts`.* FROM `posts`) AS `original_select`
J'ai mis 200 000 lignes dans ma base de test et la requete est exécutée en 3 secondes alors que s'il faisait la requête suivante, elle s'exécuterait en 0.001 ms...
SELECT count (*) as count from posts
Puis après il fait le deuxième query :
SELECT `posts`.* FROM `posts` LIMIT 10, 20
Le deuxième query me va bien
Voici le code que j'ai dans mon modele
public function fetchAll($paginated=false) { if($paginated) { // create a new Select object for the table annonce $select = new Select('posts'); // create a new result set based on the Annonce entity $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Posts()); // create a new pagination adapter object $paginatorAdapter = new DbSelect( // our configured select object $select, // the adapter to run it against $this->tableGateway->getAdapter(), // the result set to hydrate $resultSetPrototype ); $paginator = new Paginator($paginatorAdapter); return $paginator; } $resultSet = $this->tableGateway->select(); return $resultSet; }
Et dans le controller
$paginator = $this->getpostTable()->fetchAll(true); // set the current page to what has been passed in query string, or to 1 if none set $paginator->setCurrentPageNumber((int)$this->params()->fromQuery('page', 1));
Comment puis je faire pour qu'il fasse seulement un SELECT count(*) from posts ???
Merci pour votre aide car j'ai du mal avec la doc en anglais
Hors ligne
Salut, je ne connais pas trop Zend\Db mais normalement il le fait tout seul quand tu récupères le paginateur. Rajoute setItemCountPerPage sur ton paginateur pour voir .
Pour la doc malheureusement il faut y passer avec le temps ça deviendra de plus en plus facile te décourage pas !
Hors ligne