9.6. Zend_Db_Table_Rowset

9.6.1. Introdução

Zend_Db_Table_Rowset é um iterator para coleções de objetos Zend_Db_Table_Row. De modo geral, você não instancia Zend_Db_Table_Rowset; em vez disso, você recupera um objeto Zend_Db_Table_Rowset como o resultado de retorno de Zend_Db_Table::find() ou fetchAll(). Você pode então percorrer os objetos Zend_Db_Table_Row da coleção e modificá-los como desejar.

9.6.2. Buscando um Rowset

A primeira coisa a fazer é instanciar a classe Zend_Db_Table.

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

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

// define o adaptador como padrão para todos os objetos Zend_Db_Table
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);

// conecta com uma tabela no banco de dados
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
        

Em seguida, recupere vários registros do banco de dados usando Zend_Db_Table::find() com múltiplas chaves, ou usando Zend_Db_Table::fetchAll(); o resultado retornado será um objeto Zend_Db_Table_Rowset que permitirá a você percorra os objetos Zend_Db_Table_Row individuais na coleção de registros.

<?php
// busca vários registros da tabela
$rowset = $table->fetchAll();

//
// $rowset é agora um objeto Zend_Db_Table_Rowset composto por 
// um objeto Zend_Db_Table_Row por registro nos resultados
//
?>
        

9.6.3. Percorrendo o Rowset

Zend_Db_Table_Rowset implementa a interface do SPL Iterator, o que significa que você podepercorrer os objetos Zend_Db_Table_Rowset como se fossem matrizes usando foreach(). Cada valor que você recebe deste modo será um Zend_Db_Table_Row que corresponde a um registro da tabela; você pode então ver, modificar e salvar as propriedades daquele registro.

<?php
// conecta com uma tabela no banco de dados
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// busca vários registros da tabela
$rowset = $table->fetchAll();

// mostra todos
foreach ($rowset as $row) {
    // $row é um objeto Zend_Db_Table_Row
    echo "<p>" . htmlspecialchars($row->nobleTitle) . " "
       . htmlspecialchars($row->firstName) . "'s "
       . "favorite color is " . htmlspecialchars($row->favoriteColor)
       . ".</p>\n";

    // atualiza o número de vezes que mostramos este registro,
    // (a propriedade corresponde à coluna "times_displayed" na tabela)
    $row->timesDisplayed ++;

    // salva o registro com a nova informação
    $row->save();
}
?>