Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
je ne comprends pas pourquoi mon fetchALL ne fonctionne pas avec un array. Lorsque je remplace par une chaîne de caractères, tout va bien, mais si je veux utiliser les array, rien ne va plus, mon where est tout simplement inexistant. Mon objet($this->mymodel) est une instance de la classe Zend_Db_Table_Abstract.
Mon code est le suivant:
$filtres=$formulaire[0]; print_r($filtres); //donne Array ( [taches_id] => 42 ) $ar_values = $this->mymodel->fetchAll('taches_id=42','ordre')->toArray(); //fonctionne $ar_values =$this->mymodel->fetchAll($filtres,'ordre')->toArray(); //ne fonctionne pas
évidemment je peux transformer mon array en chaine de caractères, mais la solution de l'array était beaucoup plus pratique, et elle devrait fonctionner normalement...je ne comprends pas.
si quelqu'un avait une explication? une piste?
merci d'avance
Dernière modification par schwarzy2 (05-01-2012 18:01:10)
Hors ligne
Le tableau doit être de la forme suivante pour marcher :
array('taches_id=?' => '42')
Hors ligne
Sauf erreur de ma part :
'taches_id=42' ne correspond pas a un tableau , voila pourquoi cela fonctionne
il y a une difference entre 'taches_id=42'et [taches_id] => 42 quand tu utilise $filtres tu écrit :
$ar_values =$this->mymodel->fetchAll( [taches_id] => 42 ,'ordre')->toArray();
il y a une différence avec la première ligne . Essai en bouclant sur key=>value pour ton tableau tu voit ?
cdt
Hors ligne
Plop je pense que la solution De My_Sic devrait fonctionner. Voici comment est utilisé le where à travers un fetchAll() :
[lang=php]protected function _where(Zend_Db_Table_Select $select, $where) { $where = (array) $where; foreach ($where as $key => $val) { // is $key an int? if (is_int($key)) { // $val is the full condition $select->where($val); } else { // $key is the condition with placeholder, // and $val is quoted into the condition $select->where($key, $val); } } return $select; }
On voit bien que dans le cas où c'est un array indexé il récupère la clé et la valeur. Au niveau de la syntaxe que ça donne voici ce qu'on trouve sur la doc officielle :
[lang=php]$table->select() ->where('bug_status = ?', 'NEW')
où 'bug_status joue le rôle de la variable $key et 'NEW' la variable $val.
La syntaxe dans ton array doit donc être la suivante :
[lang=php]array('bug_status = ?' => 'NEW')
Dernière modification par Orkin (05-01-2012 17:52:50)
Hors ligne
Merci My_Sic! c'est exactement ce que je cherchais, effectivement il faut ajouter le =?, c'est dommage, ça empêche d'utiliser les tableaux directement, il faut les travailler avant.
Mais bon, j'ai compris ce qui clochait. Merci encore!
Merci aussi lebilien, mais en fait MySic m'a donné exactement ce que je cherchais.
/ajout merci Orkin, je n'ai vu ton message qu'après, effectivement, la solution de MySic marche parfaitement, comme tu le disais.
Dernière modification par schwarzy2 (05-01-2012 18:00:52)
Hors ligne
Pages: 1