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();
}
?>
?>