5.5. Zend_Db_Table_Row

5.5.1. Введение

Zend_Db_Table_Row является интерфейсом Zend Framework для строк данных. Обычно вы не создаете экземпляр Zend_Db_Table_Row непосредственно, вместо этого получаете Zend_Db_Table_Row как возращаемое значение методов Zend_Db_Table::find() или Zend_Db_Table::fetchRow(). Имея Zend_Db_Table_Row, вы можете редактировать значения записи (представленные как свойства класса) и затем сохранять изменения в исходной таблице методом save().

5.5.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::fetchRow(). Возвращенный результат будет объектом Zend_Db_Table_Row, где каждое свойство имеет имя с буквамиОбоихРегистров, соответствующее имени столбца с знаками_подчеркивания. Т.е., "first_name" в таблице становится "firstName" в свойствах объекта.

<?php
// извлечение записи из таблицы как объект Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

//
// $row теперь является объектом Zend_Db_Table_Row
// с открытыми свойствами, которые соответствуют столбцам таблицы:
//
// $row->id = '3'
// $row->nobleTitle = 'Sir'
// $row->firstName = 'Robin'
// $row->favoriteColor = 'yellow'
//

?>
        

5.5.3. Изменение значений

Изменение значений строки производится очень легко -- просто работайте со свойствами объекта. Когда все сделано, вы можете сохранить строку обратно в таблицу методом save().

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

// извлечение записи из таблицы как объект Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

//
// $row теперь является объектом Zend_Db_Table_Row
// с открытыми свойствами, которые соответствуют столбцам таблицы:
//
// $row->id = '3'
// $row->nobleTitle = 'Sir'
// $row->firstName = 'Robin'
// $row->favoriteColor = 'yellow'
//
// изменение любимого цвета и сохранение обратно в таблицу
$row->favoriteColor = 'blue';'
$row->save();
?>
        

Однако вам не дозволено менять значения первичного ключа. Если вы сделаете это, Zend_Db_Table_Row сгенерирует исключение.

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

// извлечение записи из таблицы как объект Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

// можем ли мы изменить первичный ключ "id"?
try {
    $row->id = 5;
    echo "Мы не должны видеть это сообщение, поскольку было сгенерировано исключение.";
} catch (Zend_Db_Table_RowException $e) {
    echo $e->getMessage();
}
?>