3.4. Zend_Db_Table_Row
Anterior | Capítulo 3. Zend_Db | Próxima

## 3.4. Zend_Db_Table_Row

### 3.4.1. Introdução

Zend_Db_Table_Row é um row data gateway do Framework Zend. De modo geral, você não instancia Zend_Db_Table_Row; em vez disso, você recebe um objeto Zend_Db_Table_Row como resultado de retorno de Zend_Db_Table::find() ou Zend_Db_Table::fetchRow(). Uma vez que você tem um Zend_Db_Table_Row, você pode editar os valores do registro (representados como propriedades de classe) e então salvar as alterações de volta à tabela de origem através do método save().

### 3.4.2. Buscando uma Linha

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 um registro do banco de dados usando Zend_Db_Table::find() com uma chave única, ou usando Zend_Db_Table::fetchRow(). O resultado retornado será um objeto Zend_Db_Table_Row em que cada propriedade do objeto é um nome no formato "camelCaps" correspondente à uma coluna da tabela no formato "underscore_words". Por exemplo, "first_name" na tabela será "firstName" nas propriedades do objeto.

    <?php
    // busca um registro da tabela como um objeto Zend_Db_Table_Row
    $row = $table->fetchRow('first_name = "Robin"');

    //
    // $row é agora um objeto Zend_Db_Table_Row com propriedades públicas
    // que mapeiam para colunas da tabela:
    //
    // $row->id = '3'
    // $row->nobleTitle = 'Sir'
    // $row->firstName = 'Robin'
    // $row->favoriteColor = 'yellow'
    //

    ?>

### 3.4.3. Modificando Valores

Modificar valores da linha é muito fácil: simplesmente trabalhe com as propriedades do objeto da mesma maneira que você faria com qualquer outro objeto. Então você pode salvar a linha de volta usando save() quando você tiver terminado.

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

    // recupera um registro da tabela como um objeto Zend_Db_Table_Row
    $row = $table->fetchRow('first_name = "Robin"');

    //
    // $row é agora um objeto Zend_Db_Table_Row com propriedades públicas
    // que mapeiam para colunas da tabela:
    //
    // $row->id = '3'
    // $row->nobleTitle = 'Sir'
    // $row->firstName = 'Robin'
    // $row->favoriteColor = 'yellow'
    //
    // altere a cor favorita e salve de volta para a tabela.
    $row->favoriteColor = 'blue';'
    $row->save();
    ?>

No entanto, você não pode alterar os valores de chaves primárias; se você fizer isso, Zend_Db_Table_Row vai descartar uma exceção.

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

    // recupera um registro da tabela como um objeto Zend_Db_Table_Row
    $row = $table->fetchRow('first_name = "Robin"');

    // podemos alterar a chave primária "id"?
    try {
        $row->id = 5;
        echo "Nós não deveríamos ver esta mensagem, porque uma exceção foi descartada.";
    } catch (Zend_Db_Table_RowException $e) {
        echo $e->getMessage();
    }
    ?>

Anterior | Acima | Próxima
3.3. Zend_Db_Table | Principal | 3.5. Zend_Db_Table_Rowset