5.6. Zend_Db_Table_Rowset

5.6.1. Введение

Zend_Db_Table_Rowset является итератором для наборов объектов Zend_Db_Table_Row. Обычно вы не создаете экземпляр Zend_Db_Table_Rowset непосредственно, вместо этого получаете Zend_Db_Table_Rowset как возращаемый результат вызова методов Zend_Db_Table::find() или fetchAll(). После этого вы можете производить итерацию набора объектовZend_Db_Table_Row и изменять их по своему желанию.

5.6.2. Извлечение набора строк

Первое, что нужно сделать -- создать экземпляр класса Zend_Db_Table.

<?php
// создание адаптера
require_once 'Zend/Db.php';
$params = array (
    'host'     => '127.0.0.1',
    'username' => 'malory',
    'password' => '******',
    'dbname'   => 'camelot'
);

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

// установка адаптера по умолчанию для всех объектов Zend_Db_Table
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);

// соединение с таблицей в БД
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
        

Далее, получите множество записей из БД, используя Zend_Db_Table::find() с набором ключей или Zend_Db_Table::fetchAll(). Возвращенный результат будет объектом Zend_Db_Table_Rowset, который позволит вам производить обход каждого отдельного объекта Zend_Db_Table_Row в наборе записей.

<?php
// извлечение множества записей из таблицы
$rowset = $table->fetchAll();

//
// $rowset теперь является объектом Zend_Db_Table_Rowset,
// состоящим из одного объекта Zend_Db_Table_Row на каждую запись в результате
//
?>
        

5.6.3. Итерация набора строк

Zend_Db_Table_Rowset реализует интерфейс итератора SPL, это означает, что вы можете обходить объекты Zend_Db_Table_Rowset как массивы, используя foreach(). Каждое значение, которое вы извлечете таким способом, будет объектом Zend_Db_Table_Row, который соответствует одной записи, полученной из таблицы. Вы можете просматривать, изменять и сохранять свойства для этих записей.

<?php
// соединение с таблицей в БД
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// извлечение множества записей из таблицы
$rowset = $table->fetchAll();

// отображение их всех
foreach ($rowset as $row) {
    // $row теперь является объектом Zend_Db_Table_Row
    echo "<p>" . htmlspecialchars($row->nobleTitle) . " "
       . htmlspecialchars($row->firstName) . "'s "
       . "favorite color is " . htmlspecialchars($row->favoriteColor)
       . ".</p>\n";

    // изменение количества отображений для данной строки
    // (ему соответствует столбец "times_displayed" в таблице)
    $row->timesDisplayed ++;

    // сохранение записи с новой информацией
    $row->save();
}
?>