Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-10-2009 15:10:58

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

[resolu]problème de pagination avec un modèle et un tableau

bonjour à tous,

bon je ne sais pas trop où positionner ce poste car m'a demande est assez spéciale. Je vais commencer par le début pour que vous compreniez bien (si c'est pas le cas posez les questions).

Je possède une table Evts_Internes qui me regroupe l'ensemble des événements réaliser sur mon stock.

Dans mon application j'ai une page me permettant de visualiser l'ensemble de ces événements grace à la pagination Zend de la manière suivante dans mon controller:

Code:

$evtsinternes=new Evtsinternes();        
$evtsinternes=$evtsinternes->fetchAll($where.$where2.$where3.$where4,'created DESC');

$page = Zend_Paginator::factory($evtsinternes);
$page->setPageRange(5);
$page->setCurrentPageNumber($this->_getParam('page', 1));
$page->setItemCountPerPage($this->_getParam('par', 15));
$this->view->mouvements = $page;

Afin d'alléger cette table, chaque début de mois, j'archive dans une table Archivage_Evts_internes les événements du mois précédent afin d'allager ma table principale.

Ma question est la suivante : comment intégrer les éléments de ma table Archivage_Evts_internes à la liste précédente?

J'ai réalisé plusieurs tests mais ceux-ci me font perdre la nature de mon objet EvtsInternes et donc l'accès à mes fonctions contenu dans mes modeles EvtsInternes et EvtsInternesRow .

Quelqu'un a-t-il une idée?

Dernière modification par matdev (19-10-2009 12:02:54)

Hors ligne

 

#2 15-10-2009 15:48:03

ndesaleux
Membre
Date d'inscription: 16-04-2007
Messages: 196
Site web

Re: [resolu]problème de pagination avec un modèle et un tableau

Penches toi du coté de l'UNION sql, genre :

Code:

Select champ1, champ2, champ3 FROM EvtsInternes
UNION
Select champ1, champ2, champ3 FROM EvtsInternesArchives

Hors ligne

 

#3 15-10-2009 16:02:34

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]problème de pagination avec un modèle et un tableau

Je me suis penché là-dessus mais comme je le disais mon problême et le fait que je perde la nature de mon objet EvtsInternes et donc sur ma vue je ne peux plus faire appel à mes fonctions findParentRow et findDependentRowset ...
Ce qu'il faudrait c'est que à mon objet EvtsInternes je puisse ajouter les lignes de Archives_Evts_internes. Je parviens à récupérer ces lignes de la table Archives_Evts_internes mais je ne sais pas comment les ajouter à l'objet EvtsInternes sans les enregistrer dans la table Evts_internes (je les ai retiré de cette table donc c'est pas pour les remettre).
Je sais pas si je suis bien clair ?

Hors ligne

 

#4 16-10-2009 14:29:25

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]problème de pagination avec un modèle et un tableau

Bon je vais modifier ma question
Je viens de faire une union entre mes deux tables de la manière suivante :

Code:

//dans mon controleur
$select = $dbAdapter->select()
    ->from('Evts_internes', '*')
    ->where($where.$where2.$where3.$where4,'closed desc'); 
            
$select2 = $dbAdapter->select()
    ->from('Archivage_Evts_internes', '*')
    ->where($where.$where2.$where3.$where4,'closed desc'); 
        
$finalSelect= $dbAdapter->select()
    ->union(array($select, $select2));

De là je récupère donc un objet Zend_Db_Select.
Est-il possible de convertir cet objet en un objet de type EvtsInternes() pour que dans la vue je puisse utiliser les fonctions findParentRow et findDependentRowset définies dans EvtsInternesRow?
Actuellement j'ai (et c'est logique) une erreur :

Code:

Fatal error: Call to a member function getTypes() on a non-object in

car mon objet n'est plus du type EvtsInternes

Dernière modification par matdev (16-10-2009 14:30:41)

Hors ligne

 

#5 16-10-2009 15:36:36

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]problème de pagination avec un modèle et un tableau

Je sais pas trop comment m'y prendre, j'essaie beaucoup de chose mais reviens toujours au même point.
Est-ce que je me dirige dans une mauvaise direction?
Est-il possible de fusionner un modèle et un tableau en conservant les propriétés et fonctions du modèle?
Faut-il simplement que dans mes vues je refasse les requêtes pour récupérer les valeurs des associations?

Hors ligne

 

#6 18-10-2009 19:11:45

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [resolu]problème de pagination avec un modèle et un tableau

Suffit de copier ce que fait Zend_Db_Table_Select pour initialiser un Rowset dans la méthode FetchAll à partir d'un tableau :

Code:

$data  = array(
    'table'    => $table,
    'data'     => $rows,
    'readOnly' => true,
    'rowClass' => $rowClass,
    'stored'   => true
);

$rowset = new $rowsetClass($data);

Hors ligne

 

#7 19-10-2009 09:22:45

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]problème de pagination avec un modèle et un tableau

C'est bon j'ai trouvé comment récupérer mes éléments de la table Archivage_Evts_internes sous le modèle Evtsinternes et donc d'utiliser les méthodes des rowClass. (merci mdelanno)

Ma question maintenant et comment fusionner les éléments de Evts_internes et Archivage_Evts_internes récupérés de la manière suivante :

Code:

//recup des evtsinternes
$evtsinternes=new Evtsinternes();
$evtsinternes=$evtsinternes->fetchAll($where.$where2.$where3.$where4,'created DESC');
//recup des archivesevtsinternes        
$data  = array(
    'name'    => 'Archivage_Evts_internes'
);               
$archivageevtsinternes = new Evtsinternes($data);
$archivageevtsinternes = $archivageevtsinternes->fetchAll($where.$where2.$where3.$where4,'created DESC');

pour les transmettre à mon Zend_Paginator afin qu'il me publie le résultat des deux fetchAll en une seule liste

Dernière modification par matdev (19-10-2009 09:53:15)

Hors ligne

 

#8 19-10-2009 12:02:34

matdev
Membre
Date d'inscription: 31-03-2009
Messages: 172

Re: [resolu]problème de pagination avec un modèle et un tableau

C'est bon j'ai trouvé la solution final
Je n'avais pas parfaitement intégré les informations de mdelanno qui étaient plus riche en infos que ce que j'en avais retiré au début.
Je vous mets la solution final que j'utilise (à savoir qu'elle peut surement être encore améliorée)

Code:

//Récupération des evts internes courants
$evtsinternes=new Evtsinternes();
$evtsinternes=$evtsinternes->fetchAll($where.$where2.$where3.$where4,'created DESC');
//Récupération des evts internes archivés
$data  = array(
     'name'    => 'Archivage_Evts_internes'
);
$archivageevtsinternes = new Evtsinternes($data);
$archi = $archivageevtsinternes->fetchAll($where.$where2.$where3.$where4,'created DESC');
//Transformation des données en tableaux
$tab=$evtsinternes->toArray();
$tab2=$archi->toArray();
//Fusion des tableaux
$tab3=array_merge($tab,$tab2);
//Création d'un objet rowset contenant les tableaux et types des modeles précédant 
$data=array(
    'table'        => $archivageevtsinternes,
    'rowClass'    => 'EvtsinternesRow',
    'data'        => $tab3,
    'stored'    => true,
    'readOnly'    => true
);                
$donnees=new Zend_Db_Table_Rowset($data);

Il ne reste plus qu'à transmettre $donnees au Zend_Paginator

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages