Bonsoir tout le monde,
J'ai un problème avec une de mes requettes Doctrine.
J'ai deux tables sql (géré via phpmyadmin) avec l'architecture suivante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 $this->setTableName('salle'); //Puis, tous les champs $this->hasColumn('id_salle', 'integer', 50, array('primary' => true, 'autoincrement' => true)); $this->hasColumn('nb_reservation','integer',50, array('default' => 0)); $this->hasColumn('nb_places','integer',50); $this->hasColumn('nom_salle', 'string', 100); $this->hasColumn('type_salle', 'string', 100); $this->hasColumn('commentaire', 'string', 4000); $this->hasColumn('acces_handicape','string',10); } public function setUp() { $this->hasMany('BaseReservation as BaseReservation', array('local' => 'id_salle', 'foreign' => 'id_salle')); }J'ai créé la requette suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 // On définit le nom de notre table : « salle ». $this->setTableName('reservation'); //Puis, tous les champs $this->hasColumn('id_reservation', 'integer', 50, array('primary' => true, 'autoincrement' => true)); $this->hasColumn('id_salle','integer',50); $this->hasColumn('nom','string',25); $this->hasColumn('date_debut', 'integer', 50); $this->hasColumn('date_fin', 'integer', 50); }
Je veux récupérer l'id et le nom des salles qui ne sont pas reservé à une date donné, avec d'autre conditions comme le type de salle et le nombre de places disponibles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $requete_salle_dispo_date = Doctrine_Query::create() ->select('id_salle,nom_salle') ->from('BaseSalle s') ->leftJoin('s.BaseReservation r') ->where('(s.nb_reservation = 0 AND type_salle = "'.$type_salle.'" AND nb_places >= '.$nb_place.') OR s.id_salle = r.id_salle AND r.date_debut NOT BETWEEN '.$date_debut.' AND '.$date_fin.' AND r.date_fin NOT BETWEEN '.$date_debut.' AND '.$date_fin.' AND type_salle = "'.$type_salle.'" AND nb_places >= '.$nb_place);
Mon problème ici est que ma requette effectue bien le test sur date_debut et date_fin du premier champ trouvé sur la table reservation mais ne va pas plus loin. Il peut y avoir plusieurs reervation pour une même salle à différentes dates, mais le test ne s'effectue que sur le premier resultat trouvé.
Comment faire en sorte que ma requette fasse un test sur TOUS les champs de ma table reservation respectant s.id_salle = r.id_salle ?
Faut t'il faire intervenir une boucle ?.
Je ne suis pas sur d'etre clair , n'hésitez pas si vous avez des questions, je vous remercie.
David.
Partager