Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
quand je fais :
$db = new Content_Model_DbTable_Category(); $data = $db->fetchAll(); Zend_Debug::dump($data);
J'obtient :
object(Zend_Db_Table_Rowset)#56 (10) { ["_data":protected] => array(0) { } ["_table":protected] => object(Content_Model_DbTable_Category)#39 (18) { ["_name":protected] => string(8) "category" ["_primary":protected] => array(1) { [1] => string(2) "id" } ["_dependentTables":protected] => array(1) { [0] => string(26) "Content_Model_DbTable_Item" } ["_definition":protected] => NULL ["_definitionConfigName":protected] => NULL ["_db":protected] => object(Zend_Db_Adapter_Pdo_Mysql)#22 (12) { ["_pdoType":protected] => string(5) "mysql" ["_numericDataTypes":protected] => array(16) { [0] => int(0) [1] => int(1) [2] => int(2) ["INT"] => int(0) ["INTEGER"] => int(0) ["MEDIUMINT"] => int(0) ["SMALLINT"] => int(0) ["TINYINT"] => int(0) ["BIGINT"] => int(1) ["SERIAL"] => int(1) ["DEC"] => int(2) ["DECIMAL"] => int(2) ["DOUBLE"] => int(2) ["DOUBLE PRECISION"] => int(2) ["FIXED"] => int(2) ["FLOAT"] => int(2) } . . . .
Par contre quand j'utilise fetchRow j'ai pas ce probleme la.
Je comprend pas d'où sort tout ces truc et comment les enlever.
Merci d'avance pour votre réponse.
Dernière modification par snyfir (25-02-2010 14:14:10)
Hors ligne
Ceci est tout à fait normal.
Lorsque tu utilises fetchRow(), tu récupère UNE seul ligne, donc un objet Zend_Db_Table_Row, sur le quel tu peux utiliser les méthodes magiques __get(), __set() etc afin d'utiliser ta "row" comme un simple objet que tu enregistres avec save();
Quand tu utilises fetchAll(), tu récupères un LOT de lignes. Ce lot est donc stocké dans un objet collection Zend_Db_Table_Rowset qui est Iterable, Countable. Tu peux ainsi faire un foreach dessus afin de révupérer tes rows qui fonctionneront comme celle récupérer avec fetchRow().
Tout ce fonctionnement est très pratique puisque nous travaillons dans un environnement objet.
D'ailleurs amuses-toi à faire un var_dump() sur ta row récupérer avec fetchRow(), tu trouveras autant de "trucs".
Je t'invite à regarder en profondeur les parterns Iterable, Countable et à te renseigner sur les notions de collection et d'objet comportant des méthodes magiques pour bien comprendre comment fonctionne tout ça.
PS: si vraiment tu veux récupérer ton lot sous forme de tableau, tu dois pouvoir faire $db->fetchAll()->toArray(), mais dans une utilisation basic ça n'est pas nécessaire comme je l'ai dis, car Zend_Db_Table_Rowset est Iterable et countable, tout comme un simple array.
Hors ligne
fetchAll te renvoie un seul objet de type Rowset, c'est normal.
Par contre cet objet est un "itérateur" (cf dans la documentation de PHP, cherche du coté de "iterator" ou de "SPL"), donc tu peux faire un foreach dessus, il va se comporter comme un tableau.
En clair tu peux faire :
$db = new Content_Model_DbTable_Category(); $data = $db->fetchAll(); foreach ($data as $row) { // je fais mon traitement sur mes $row }
A+, Philippe
edit : damned, grillé par Mr Moox... bon, cela dit on explique 2 aspects différents du problème
Dernière modification par philippe (24-02-2010 10:27:57)
Hors ligne