Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 26-12-2014 13:25:06

Reromains
Nouveau membre
Date d'inscription: 26-12-2014
Messages: 4

Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Bonjour,
Je débute sur Zend, et j'ai besoin d'écrire une requête avec un "WHERE NOT EXISTS".

Voici ma requête :

Code:

[lang=sql]SELECT m.NOM 
FROM MEMBRE AS m 
WHERE NOT EXISTS 
    ( SELECT * 
    FROM PARTICIPATION AS p 
    WHERE IDEVENEMENT = $idevt 
    AND m.IDMEMBRE = p.IDMEMBRE)

Sachant que dans notre implémentation, on fait nos requête sur un objet TableGateway habituellement,
par exemple pour une simple fonction :

Code:

[lang=php]    public function getMembreById($id)
    {
        $resultSet = $this->tableGateway->select(array("idmembre" => "$id"));
        return $resultSet;
    }

J'ai beau avoir chercher partout, je n'ai trouvé nul part comment utiliser le WHERE EXISTS/NOT EXISTS avec le framework zend.

J'espère que ma question est claire... je vous souhaite à tous et à toutes de bonnes fêtes de fin d'année smile
Et merci d'avance

Hors ligne

 

#2 26-12-2014 13:41:35

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Bonjour,

en fouillant une minute je suis tombé sur cela :

http://www.aronkerr.com/2013/08/zf2-sql … g-zf2.html

Est-ce que cela t'aide ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 26-12-2014 14:27:00

Reromains
Nouveau membre
Date d'inscription: 26-12-2014
Messages: 4

Re: Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Bonjour JGreco,
Je n'etais jamais tombé sur ce lien.

Du coup j'ai mis en place ceci :

Code:

[lang=php]    public function getNonParticipationByIdEvt($id){
         
        // Get the DB adapter
        $adapter = $this->tableGateway->getAdapter();
        
        //Build the main query
        $sql = new Sql($adapter);
        $select = $sql->select();
        $select->from(array('m' => 'MEMBRE'));
        
        //Create subquery
        $subSelect = $sql->select();
        $subSelect->from(array('p' => 'PARTICIPATION'));
        $subSelect->where('m.IDMEMBRE = p.IDMEMBRE');
        $subSelect->where('P.IDEVENEMENT = '.$id);
        
        //Add the subqeury as a predicate to the main query
        
        $select->where->addPredicate(
            new Expression(
                "NOT EXISTS(" . @$subSelect->getSqlString($adapter->getPlatform()).")"
                )
            );
        
        //Run the query
        $statement = $sql->prepareStatementForSqlObject($select);
        $data = $statement->execute();
        
    }

Le problème, c'est que j'obtiens cette erreur :

Code:

File:

    C:\wamp\www\IE1-2ProjJeuxdicode\Jeuxdicode\Jeuxdicode\vendor\zendframework\zendframework\library\Zend\Db\Adapter\Driver\Pdo\Result.php:155

Message:

    This result is a forward only result set, calling rewind() after moving forward is not supported

As tu une idée ?

--
Autre question : peut-on faire des requêtes SQL sous forme String comme on les fait en php avec le framework zend ? (c'est à dire que je met ma requête dans une variable, et j'utilise une fonction comme query() ou un équivalent...)

Merci en tout cas !

Hors ligne

 

#4 26-12-2014 14:52:52

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Non je n'ai pas d'autre idée..

On dirait un problème de buffer, essaye de voir si cela corresponds à ton soucis :

http://stackoverflow.com/questions/1856 … ng-forward
http://www.z-f.fr/forum/viewtopic.php?id=8238


Le deuxième lien réponds un peu a tes autres questions.

Personnellement, lorsque j'ai découvert Zend Framework 2 j'ai zappé toute la couche TableGateway car elle ne m’intéressait pas du tout, je préfère largement doctrine. Je connais donc plutôt mal cette couche du framework.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 27-12-2014 13:38:10

Reromains
Nouveau membre
Date d'inscription: 26-12-2014
Messages: 4

Re: Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Merci JGreco.
Finalement, j'ai réussi à enlever cette erreur (j'utilisais deux fois les résultats d'une requête que j'appellais dans mon Controller, bref).

Le problème, c'est que je ne sais pas quoi retourner à la suite de ma fonction getNonParticipationByIdEvt

Car si tu vois par exemple cette fonction :

Code:

[lang=php]    public function getParticipationByIdEvt($id)
    {
        $resultSet = $this->tableGateway->select(array(
            "idevenement" => "$id"
        ));
        return $resultSet;

Je retourne mon objet resultSet, mais dans mon autre fonction, que dois-je retourner ? Je ne trouve pas d'équivalent à l'objet resultSet..
Merci d'avance

Hors ligne

 

#6 27-12-2014 15:04:27

Reromains
Nouveau membre
Date d'inscription: 26-12-2014
Messages: 4

Re: Ecriture d'une requête SQL avec un "WHERE NOT EXISTS" au format zend..

Finalement, j'ai fais plus simple en n'utilisant pas de WHERE EXIST...

Pourquoi faire compliqué lorsqu'on peut faire simple ...
Mais toutefois, les réponses à ma question m'interesse !

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