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