Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'ai un problème pour transcrire une requête SQL en utilisant Zend_Db_Select :
Voici la requête (qui fonctionne) :
[lang=sql]SELECT * FROM Repondants,action WHERE action.id_rep='$idrep' AND Repondants.IDS=$idsurvey AND action.id_rep=Repondants.id_rep AND action.Date_Emission='$date_emission'
Voici comment je la traduit en utilisant Zend_Db_Select :
[lang=php]$filtre2 = "action.id_rep = ". $idrep . " AND repondants.IDS = " . $idsurvey . " AND action.id_rep = repondants.id_rep AND action.Date_Emission = " . $date_emission ; $select = $db->select() ->from('repondants') ->from('action') ->where($filtre2); $action_rowset=$db->fetchall($select->query()); $action_rowcount= count($action_rowset);
Malheureusement, cela ne fonctionne pas, et voici le message d'erreur :
Catchable fatal error: Object of class Zend_Db_Statement_Pdo could not be converted to string in C:\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Statement.php on line 204
Je ne trouve rien de concluant sur internet...
Merci d'avance de votre précieuse aide
Dernière modification par niusha (13-05-2011 15:21:47)
Hors ligne
Bonjour,
Je pense qu'un petit tour sur la doc serait le bienvenu : http://framework.zend.com/manual/fr/zend.db.select.html
Je ne rentrerai pas dans le détail, mais voici ce à quoi pourrai ressembler la requête.
Pensez à utiliser les jointures, cela rendra votre code plus lisible.
$table = $this->getDbTable(); $select = $table ->select() ->from(.....) ->joinLeft(...) ->joinLeft(...) ->where("action.id_rep=$idrep") ->where("Repondants.IDS=$idsurvey") ; return $table->fetchAll($select)->toArray();
et pour visualiser la requête :
echo $select->__toString();
En espérant que cela vous donne de bonnes pistes.
Dernière modification par _Fuse_ (13-05-2011 12:05:25)
Hors ligne
Bonjour et merci pour votre réponse.
J'ai résolu mon problème, voici la version corrigée de mon premier post qui fonctionne :
[lang=php] $filtre2 = "action.id_rep = ". $idrep . " AND repondants.IDS = " . $idsurvey . " AND action.id_rep = repondants.id_rep AND action.Date_Emission = '" . $date_emission . "'"; $select = $db->select() ->from('repondants') ->from('action') ->where($filtre2); $action_rowset=$select->query()->fetchAll(); $action_rowcount= count($action_rowset);
Erreur dans mon filtre, il manquait les ' ' autour de ma variable $date_emission qui est attendue en VARCHAR par la base de données
Erreur : ne pas utiliser $action_rowset=$db->fetchall($select->query()); mais comme je l'ai fait ci-dessus.
Hors ligne