9.6. Zend_Db_Table_Rowset

9.6.1. Wprowadzenie

Zend_Db_Table_Rowset jest iteratorem dla kolekcji obiektów Zend_Db_Table_Row. W zasadzie nie tworzysz sam instancji Zend_Db_Table_Rowset; zamiast tego odbierasz obiekt Zend_Db_Table_Rowset jako rezultat wywołania metody Zend_Db_Table::find() lub fetchAll(). Możesz wtedy przejść przez kolekcję obiektów Zend_Db_Table_Row i modyfikować je tak jak chcesz.

9.6.2. Pobieranie zestawu wierszy

Pierwsza rzecz do zrobienia to utworzenie instancji klasy Zend_Db_Table.

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

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

// ustawmy domyślny adapter dla wszystkich obiektów Zend_Db_Table
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);

// połączmy się z tabelą w bazie danych
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
        

Następnie pobieramy wiele rekordów z bazy danych używając metody Zend_Db_Table::find() z wieloma kluczami, lub używając metody Zend_Db_Table::fetchAll(); zwrócony wynik będzie obiektem Zend_Db_Table_Rowset który pozwoli ci na poruszanie się poprzez indywidualne obiekty Zend_Db_Table_Row w zestawie wierszy.

<?php
// pobieranie wielu wierszy z tabeli
$rowset = $table->fetchAll();

//
// $rowset jest teraz obiektem Zend_Db_Table_Rowset składającym się
// z obiektów Zend_Db_Table_Row, po jednym dla każdego wiersza
//
?>
        

9.6.3. Przechodzenie przez zestaw wierszy

Zend_Db_Table_Rowset implementuje interfejs SPL Iterator, co oznacza, że możesz przejść w pętli przez obiekty Zend_Db_Table_Rowset jak przez tablicę używając instrukcji foreach(). Każda wartość którą odbierzesz będzie obiektem Zend_Db_Table_Row, który odpowiada jednemu rekordowi z tabeli; możesz odczytywać, modyfikować i zapisywać właściwości dla każdego rekordu.

<?php
// połączmy się z tabelą w bazie danych
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// pobieranie wielu wierszy z tabeli
$rowset = $table->fetchAll();

// wyświetlamy wszystkie
foreach ($rowset as $row) {
    // $row jest obiektem Zend_Db_Table_Row
    echo "<p>" . htmlspecialchars($row->nobleTitle) . " "
       . htmlspecialchars($row->firstName) . "'s "
       . "ulubiony kolor to " . htmlspecialchars($row->favoriteColor)
       . ".</p>\n";

    // aktualizujemy ilość wyświetleń danego wiersza,
    // (co odpowiada kolumnie w tabeli "times_displayed")
    $row->timesDisplayed ++;

    // zapisujemy rekord z nową informacją
    $row->save();
}
?>