7.6. Zend_Db_Table_Rowset

7.6.1. Einführung

Zend_Db_Table_Rowset ist ein Iterator für Sammlungen von Zend_Db_Table_Row Objekten. Im Allgemeinen kannst du Zend_Db_Table_Rowset nicht selbst instanziieren; stattdessen erhältst du eine Zend_Db_Table_Rowset Objekt als Rückgabewert von einem Zend_Db_Table::find() oder fetchAll() Aufruf. Du kannst dann durch die gesammelten Zend_Db_Table_Row Objekte iterieren und sie verändern, wie du möchtest.

7.6.2. Einen Zeilensatz holen

Als erstes muss die Zend_Db_Table Klasse instanziiert werden.

<?php
// Einen Adapter erzeugen
require_once 'Zend/Db.php';
$params = array (
    'host'     => '127.0.0.1',
    'username' => 'malory',
    'password' => '******',
    'dbname'   => 'camelot'
);

$db = Zend_Db::factory('PDO_MYSQL', $params);

// Den Default Adapter für alle Zend_Db_Table Objekte setzen
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);

// Zu einer Tabelle in der Datenbank verbinden
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
        

Als nächstes empfänge mehrere Datensätze aus deiner Datenbank durch Verwendung von Zend_Db_Table::find() mit mehreren Schlüssel oder durch Verwendung von Zend_Db_Table::fetchAll(); das zurückgegebene Ergebnis wird ein Zend_Db_Table_Rowset Objekt sein, dass dich durch die individuellen Zend_Db_Table_Row Objekte in dem Zeilensatz iterieren lässt.

<?php
// hole mehrere Datensätze aus der Tabelle
$rowset = $table->fetchAll();

//
// $rowset ist nun ein Zend_Db_Table_Rowset Objekt bestehend aus 
// einem Zend_Db_Table_Row Objekt pro Datensatz im Ergebnis
//
?>
        

7.6.3. Durch den Zeilensatz iterieren

Zend_Db_Table_Rowset implementiert das SPL Iterator Interface, was bedeutet, dass du Zend_Db_Table_Rowset Objekte wie Arrays mittels foreach() durchlaufen kannst. Jeder Wert, den du auf dieser Weise erhältst, wird ein Zend_Db_Table_Row Objekt sein, das einem Datensatz in deiner Tabelle entspricht; du kannst die Eigenschaften des Datensatzes anzeigen, ändern oder speichern.

<?php
// Zu einer Tabelle in der Datenbank verbinden
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// hole mehrere Datensätze aus der Tabelle
$rowset = $table->fetchAll();

// zeige sie alle an
foreach ($rowset as $row) {
    // $row ist ein Zend_Db_Table_Row Objekt
    echo "<p>" . htmlspecialchars($row->nobleTitle) . " "
       . htmlspecialchars($row->firstName) . "'s "
       . "favorite color is " . htmlspecialchars($row->favoriteColor)
       . ".</p>\n";

    // aktualisiere die Anzahl, wie oft diese Zeile angezeigt worden ist,
    // (was auf eine Spalte "times_displayed" in der Tabelle abgebildet wird)
    $row->timesDisplayed ++;

    // speichere den Datensatz mit den neuen Informationen
    $row->save();
}
?>