Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-03-2008 15:08:25

elbutcho
Nouveau membre
Date d'inscription: 25-03-2008
Messages: 8

Requete sur une table avec 2 clés étrangères

Bonjour,

J'ai deux tables dans ma base de données: matches et equipes

Voici comment elles se présentent:

Code:

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:

Code:

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...

Code:

$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

 

#2 27-03-2008 07:50:47

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Requete sur une table avec 2 clés étrangères

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 :

Code:

   /**
     * 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

 

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