Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je débute sur Zend, et j'ai besoin d'écrire une requête avec un "WHERE NOT EXISTS".
Voici ma requête :
[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 :
[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
Et merci d'avance
Hors ligne
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 ?
Hors ligne
Bonjour JGreco,
Je n'etais jamais tombé sur ce lien.
Du coup j'ai mis en place ceci :
[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 :
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
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.
Hors ligne
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 :
[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
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
Pages: 1