Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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:
$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
Penches toi du coté de l'UNION sql, genre :
Select champ1, champ2, champ3 FROM EvtsInternes UNION Select champ1, champ2, champ3 FROM EvtsInternesArchives
Hors ligne
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
Bon je vais modifier ma question
Je viens de faire une union entre mes deux tables de la manière suivante :
//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 :
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
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
Suffit de copier ce que fait Zend_Db_Table_Select pour initialiser un Rowset dans la méthode FetchAll à partir d'un tableau :
$data = array( 'table' => $table, 'data' => $rows, 'readOnly' => true, 'rowClass' => $rowClass, 'stored' => true ); $rowset = new $rowsetClass($data);
Hors ligne
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 :
//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
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)
//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