Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-01-2008 18:58:00

tschtong
Membre
Lieu: Bretagne
Date d'inscription: 06-11-2007
Messages: 55

requête dans une boucle

Bonjour à tous,

je bloque sur une requête qui ne passe pas correctement dans une boucle :
Pour être plus clair je vous présente le bout de code :

Code:

// On récupére les horaires de l'offre
$horaires = new Horaires();
$this->view->horairesOffre = $horaires->fetchAll('id_horaire='.$ID_offre);

/* En passant dans la boucle les résultats de la requête précédente j'espère récupérer une
liste de mes enregistrements qui correspondent aux jours et aux horaires de l'offre */

foreach ($this->view->horairesOffre as $ho) 
{ 
        
    $Intervenants = new Horaires();
    $where[] = "jour = '$ho->jour'";
    $where[] = "heureDebut >= '$ho->heureDebut'";
    $where[] = "heureFin <= '$ho->heureFin'";
    $where[] = "id_horaire >'400000000'";
    // Les intervenants avec des horaires compatibles :
    $this->view->intervenant = $Intervenant->fetchAll($where,"id DESC");

        Zend_Debug::dump($this->view->intervenant);

/* Le problème est que $this->intervenant ne récupère qu'une partie des résultats souhaités : en effet il ne me sort qu'un seul jour alors que dans $ho il y a plusieurs jours*/
        
      (...)

Je sais que c'est un problème qui n'est pas forcément propre à ZF... mais si une personne pouvaut me filer un coup de main, ca pourrait me dépanner, surtout que j'ai déjà passer pas mal de temps à bricoler des essais sans résultats.

Merci à vous, a+ tschtong

Dernière modification par tschtong (08-01-2008 19:05:12)

Hors ligne

 

#2 08-01-2008 19:00:02

Phoenix17
Membre
Lieu: Nancy
Date d'inscription: 09-04-2007
Messages: 73
Site web

Re: requête dans une boucle

Bonjour,

Essaye en suivant une syntaxe similaire pour tes clauses where :


Code:

$where = array(
    "jour = ?" => $ho->jour,
    "heureDebut >= ?" => $ho->heureFin,
    "heureFin <= ?"  => $ho->heureFin,
    "id_horaire > ?" => 400000000,
)

...

Dernière modification par Phoenix17 (08-01-2008 19:03:43)

Hors ligne

 

#3 08-01-2008 19:23:57

tschtong
Membre
Lieu: Bretagne
Date d'inscription: 06-11-2007
Messages: 55

Re: requête dans une boucle

Super merci à toi, mais quelle différence y a t-il entre ta méthode et la mienne ?
A+ tschtong

Hors ligne

 

#4 08-01-2008 20:18:56

Phoenix17
Membre
Lieu: Nancy
Date d'inscription: 09-04-2007
Messages: 73
Site web

Re: requête dans une boucle

Bun à ma connaissance, les noms des champs et les valeurs seront echapées pour éviter toutes injections sql.

Je ne suis pas sûr que ta méthode le permette... je ne suis pas sûr, mais si cela se trouve, c'est du pareil au même.

Sinon pour te problème, je ne vois pas trop, à la rigueur, balance nous un extrait de ta table 'Horaires'.

D'ailleurs, j'ai remarqué que tu réinstancié le même model (Horaires) à l'intérieur de ta boucle foreach ($Intervenants), or ce n'est pas utile vu qu'elle l'est déjà plus haut ($horaires).

Hors ligne

 

#5 08-01-2008 20:35:36

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: requête dans une boucle

dans $ho il y a plusieurs jours

$ho ou $this->view->horairesOffre? Car $ho est une row, il ne peux donc pas y avoir plusieurs jours.

Autre remarque tu fait

Code:

$this->view->intervenant = ...

$this->view->intervenant ne comportera que le dernier fetchAll de ta boucle. Tu devrais plutôt mettre un tableau.

Hors ligne

 

#6 08-01-2008 23:07:12

tschtong
Membre
Lieu: Bretagne
Date d'inscription: 06-11-2007
Messages: 55

Re: requête dans une boucle

Phoenix17 a écrit:

Sinon pour te problème, je ne vois pas trop, à la rigueur, balance nous un extrait de ta table 'Horaires'.

D'ailleurs, j'ai remarqué que tu réinstancié le même model (Horaires) à l'intérieur de ta boucle foreach ($Intervenants), or ce n'est pas utile vu qu'elle l'est déjà plus haut ($horaires).

Non mais c'est bon maintenant. En fait c'était du aux clauses where. J'ai modifié comme tu me l'as indiqué et là pas de prob il me sort bien autant de tableaux qu'il y a de jours dans $ho.

Mr.MoOx a écrit:

$this->view->intervenant ne comportera que le dernier fetchAll de ta boucle. Tu devrais plutôt mettre un tableau.

En fait je vous ai montré qu'une partie du code. En fait au final je rempli effectivement un autre tableau dans cette même boucle.

Merci à vous !
a+ tschtong

Hors ligne

 

#7 09-01-2008 09:11:32

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: requête dans une boucle

ce n'est pas très performant de faire ainsi de multiple requête
il vaut mieux faire une seule requête avec une jointure

A+JYT

Hors ligne

 

#8 09-01-2008 09:20:09

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: requête dans une boucle

+1

Hors ligne

 

#9 09-01-2008 11:18:00

Isilgawen
Membre
Lieu: Limoges
Date d'inscription: 23-03-2007
Messages: 106

Re: requête dans une boucle

Surtout qu'il attaque toujours le même model : "Horaires" avec les données du model lui même.
Y a une incohérance quelque part ...

Hors ligne

 

#10 09-01-2008 13:38:05

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: requête dans une boucle

Code:

foreach ($this->view->horairesOffre as $ho) 
{ 
        
    $Intervenants = new Horaires();
    $where[] = "jour = '$ho->jour'";
    $where[] = "heureDebut >= '$ho->heureDebut'";
    $where[] = "heureFin <= '$ho->heureFin'";
    $where[] = "id_horaire >'400000000'";

etc...

Tu dois te retrouver avec un array $where  énorme à la fin de ta boucle si tu ne le remet p as à "zéro" à chaque début d'itération.


Société : Direct Info Service

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