3.6. Zend_Db_Table_Rowset
Précédent | Chapitre 3. Zend_Db | Suivant

## 3.6. Zend_Db_Table_Rowset

### 3.6.1. Introduction

`Zend_Db_Table_Rowset` constitue un itérateur sur une série d'objets `Zend_Db_Table_Row`. En général, vous n'instanciez pas directement `Zend_Db_Table_Rowset`; vous obtenez plutôt un objet `Zend_Db_Table_Rowset` comme valeur de renvoi des méthodes `Zend_Db_Table::find()` ou `fetchAll()`. Vous pouvez ensuite itérer sur les objets `Zend_Db_Table_Row` ainsi rassemblés et les modifier comme vous voulez.

### 3.6.2. Aller chercher un ensemble de lignes

La première chose à faire consiste à instancier la classe `Zend_Db_Table`.

    <?php
    // définition d'un adaptateur
    require_once 'Zend/Db.php';
    $parametres = array (
        'adapter'  => 'PDO_MYSQL',
        'host'     => '127.0.0.1',
        'username' => 'arthur',
        'password' => '******',
        'dbname'   => 'camelot'
    );

    $db = Zend_Db::factory($parametres);

    // définition de l'adaptateur par défaut de tous les objets Zend_Db_Table
    require_once 'Zend/Db/Table.php';
    Zend_Db_Table::setDefaultAdapter($db);

    // connexion à une table de la base de données
    class TableRonde extends Zend_Db_Table {}
    $table = new TableRonde();
    ?>

Puis, on obtient plusieurs enregistrements de la base de données en passant plusieurs clés à la méthode `Zend_Db_Table::find()` ou en utilisant la méthode `Zend_Db_Table::fetchAll()`; le résultat renvoyé sera un objet `Zend_Db_Table_Rowset` qui vous permettra d'itérer sur les objets `Zend_Db_Table_Row` associés aux enregistrements de l'ensemble.

    <?php
    // on va chercher plusieurs enregistrements de la table
    $lignes = $table->fetchAll();

    //
    // $lignes constitue maintenant un objet Zend_Db_Table_Rowset composé d'un
    // objet Zend_Db_Table_Row par enregistrement du résultat
    //
    ?>

### 3.6.3. Itérer sur l'ensemble de lignes

`Zend_Db_Table_Rowset` implémente l'interface SPL, ce qui signifie que vous pouvez itérer sur les objets `Zend_Db_Table_Rowset` à l'aide de foreach(), tout comme pour les tableaux. La valeur obtenue à chaque itération sera un objet `Zend_Db_Table_Row` qui correspond à un enregistrement de la table; vous pouvez ensuite voir, modifier et enregistrer les propriétés de cet enregistrement.

    <?php
    // connexion à une table de la base de données
    class TableRonde extends Zend_Db_Table {}
    $table = new TableRonde();

    // récupération de plusieurs enregistrements de la table
    $lignes = $table->fetchAll();

    // affichage
    foreach($lignes as $ligne) {
        // $ligne est un objet Zend_Db_Table_Row
        echo "<p>La couleur préférée de " . htmlspecialchars($ligne->titre) . " "
           . htmlspecialchars($ligne->prenom) . " est " .
    htmlspecialchars($ligne->couleurPreferee)
           . ".</p>\n";

        // mise à jour du nombre de fois où cette ligne a été affichée
        // (propriété associée à la colonne "nombre_de_fois_affichee" de la table)
        $ligne->nombreDeFoisAffichee ++;

        // enregistrement avec ses nouvelles informations
        $ligne->save();
    }
    ?>
    ?>

Précédent | Niveau supérieur | Suivant
3.5. Zend_Db_Table_Row | Sommaire | Chapitre 4. Zend_Feed