Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-10-2012 09:44:52

PeuX
Membre
Date d'inscription: 16-10-2012
Messages: 13

Requete SQL et parenthèse

Bonjour,
Je m’essaie tout doucement sur ZF 2 et je bloque un peu lors de la construction de mes requêtes sql.
Pour le départ de mon module je me suis basé sur le tuto des albums, et en gros j’essaie de modifier AlbumTable pour que le fetchAll ne renvoi que sous certaine conditions.

La requete final devrait ressembler à qqch du genre :

Code:

[lang=sql] Select * FROM Album WHERE condition1 = 1 AND (condition2 ='toto' OR condition2='tata')

Pour se faire dans AlbumTable je suis parti la dessus

Code:

[lang=php]
$resultSet= $this->select(function(Select $select) use ($condition1) {
    $select->where(array('condition1'=>$condition1));
    $select->where(array('condition2'=>'perso','condition2'=>'master'),Predicate\PredicateSet::OP_OR);
});

Mais ça ne me génère pas ce que je voudrais, cela génère la requètes suivante :

Code:

[lang=sql]
SELECT [Album].* FROM [Album] WHERE [condition1] = 1  OR [condition2] = 'master'

Il me bouffe un de mes prédicats, et il ne met pas de parenthèses autour de chaque prédicats (chose que faisait ZF1 je crois), et la du coup je suis un peu perdu....

Si une bonne âme peu m'indiquer où regarder je suis preneur...

Hors ligne

 

#2 16-10-2012 09:58:55

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Requete SQL et parenthèse

Salut en fait ce qu'il se passe c'est que tu fais 2 fois l'appel à where et je pense que le deuxième where écrase le premier ce qui explique pourquoi tu n'as que le deuxième. Essaie de voir si andWhere existe comme méthode et utilises celle-ci lorsque que tu dois rajouter plusieurs clauses where.

Enfin je ne peux que t'encourager à utiliser Doctrine 2 la documentation pour une utilisation "rapide et simple" est vraiment bien foutue smile

Hors ligne

 

#3 16-10-2012 10:37:31

PeuX
Membre
Date d'inscription: 16-10-2012
Messages: 13

Re: Requete SQL et parenthèse

Merci de ta réponse,
Pour Doctrine 2 je pense que je regarderai de ce coter un peu plus tard, mais en effet, ça a l'air intéressant.

Sinon pour ce qui est de mon problème immédiat, la méthode andWhere ou orWhere n'existe pas, du coup il faut passé autrement.
Voila une solution que j'ai trouvé, je sais pas si il y a plus simple ( et franchement j’espère qu'il y a plus simple...)

Code:

[lang=php]
$resultSet= $this->select(function(Select $select) use ($condition1) {
                    $select->where(array('condition1'=>$condition1));
                    $grp=$select->where->nest();
                    $grp->equalTo('condition2','tata');
                    $grp->__get('or');
                    $grp->equalTo('condition2','toto');
                    $grp->unnest();
                });

Pour la petite explication avec nest on lui dit de créer un groupe de prédicat(d’ailleurs il renvoi un objet predicatSet) ensuite je fait ma première comparaison, avec le __get on place le prochain opérateur a OR et puis on fait la deuxièmes comparaison, et pour finir on indique la fin du groupement.

et cela produit bien le sql suivant :

Code:

[lang=sql]
Select * FROM Album WHERE condition1 = 1 AND (condition2 ='toto' OR condition2='tata')

Si ça peut servir à qq'un wink

Hors ligne

 

#4 16-10-2012 11:05:01

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Requete SQL et parenthèse

Allez on va faire dans les bonnes pratiques ( @Orkin smile )

Essaie plutôt de construire cette requête :

Code:

[lang=sql]
Select * FROM Album WHERE condition1 = 1 AND condition2 IN ('toto', 'tata');

22914720

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