Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-02-2010 23:26:33

snyfir
Membre
Date d'inscription: 28-10-2009
Messages: 19

[résolu] fetchAll() retourne plein de chose

Bonjour,

quand je fais :

Code:

$db = new Content_Model_DbTable_Category();
$data = $db->fetchAll();
Zend_Debug::dump($data);

J'obtient :

Code:

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

 

#2 24-02-2010 10:24:18

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: [résolu] fetchAll() retourne plein de chose

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

 

#3 24-02-2010 10:26:43

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [résolu] fetchAll() retourne plein de chose

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 :

Code:

$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 smile

Dernière modification par philippe (24-02-2010 10:27:57)


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

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