5.5. Zend_Db_Table_Row
Пред. | Глава 5. Zend_Db | След.

## 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();
    }
    ?>

Пред. | Уровень выше | След.
5.4. Zend_Db_Table | Начало | 5.6. Zend_Db_Table_Rowset