Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai deux tables dans ma base de données: matches et equipes
Voici comment elles se présentent:
CREATE TABLE `equipes` ( `id` int(10) NOT NULL auto_increment, `libelle_unique` varchar(30) NOT NULL, `libelle` varchar(30) NOT NULL, `libelle_affiche` varchar(50) default NULL, `fk_idLigue` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `libelle_unique` (`libelle_unique`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; CREATE TABLE `matches` ( `id` int(11) NOT NULL auto_increment, `fk_idEquipeDomicile` int(11) NOT NULL, `fk_idEquipeVisiteuse` int(11) NOT NULL, `nbGoalsDomicile` varchar(10) default NULL, `nbGoalsVisiteur` varchar(10) default NULL, `date_match` date default NULL, PRIMARY KEY (`id`), KEY `fk_idEquipeDomicile` (`fk_idEquipeDomicile`), KEY `fk_idEquipeVisiteuse` (`fk_idEquipeVisiteuse`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
J'ai mappe mes classes Match et Equipe. J'ai testé, les requêtes simples fonctionnent.
J'aimerais séléctionner les matches d'une équipe particulière, qu'elle joue à domicile ou à l'extérieur...
Avec un requête sql normale, cela donne quelque chose comme ca:
SELECT e1.libelle AS equipeDom, e2.libelle AS equipeExt, nbGoalsDomicile, nbGoalsVisiteur, date_match FROM equipes e1, equipes e2, matches WHERE e1.id = matches.fk_idEquipeDomicile AND e2.id = matches.fk_idEquipeVisiteuse AND (e1.id = (SELECT equipes.id FROM equipes where equipes.id=? ) OR e2.id = (SELECT equipes.id FROM equipes where equipes.id=? ))
Pour l'insant j'arrive uniquement à récupérer les matchs a domicile ou ceux à l'extérieur mais pas les deux...
$equipeTable = new Equipe(); $equipesRowset= $equipeTable->find(1); $equipe1= $equipesRowset ->current(); $matchEquipe = $equipe1->findDependentRowset('Match', 'Domicile');
Avez-vous une idée de comment procéder?
Merci d'avance
Dernière modification par elbutcho (25-03-2008 15:25:00)
Hors ligne
Je ne vais pas répondre directement à ta question mais moi pour résoudre ces requêtes "complexes", j'ai créé une fonction (pour toi dans Equipe) qui me retourne un Zend::Rows. De mon point de vue, c'est beaucoup plus simple à réutiliser dans mes controlleurs car je récupère tout ce que j'ai besoin en une seule ligne. Du coup, ta requête SQL est exécuté tel quel (en utilisant la fonction $select = Zend_Table->select() et $rowset = Zend_Table->FetchAll($select). Si tu es sûr d'avoir un seul enregistrement t peux retourner la ligne avec un simple "return $rowset->current()". Et là tu appel cette fonction et tu récupères ton enregistrement.
Sinon à lire le prototype de findDepentRowSet :
/** * Query a dependent table to retrieve rows matching the current row. * * @param string|Zend_Db_Table_Abstract $dependentTable * @param string OPTIONAL $ruleKey * @return Zend_Db_Table_Rowset_Abstract Query result from $dependentTable * @throws Zend_Db_Table_Row_Exception If $dependentTable is not a table or is not loadable. */ public function findDependentRowset($dependentTable, $ruleKey = null, Zend_Db_Table_Select $select = null)
je ne crois pas que ce soit possible de faire ce que tu veux car $ruleKey est une string et non un tableau. En passant, tu remarqueras que dans la version final 1.5 il y'a un nouveau paramètre qui n'est pas documenté dans cette fonction : Zend_Db_Table_Select. Essaie de passer ta requête par ici peut-être.
Dernière modification par whitespirit (27-03-2008 08:06:27)
Hors ligne