7.5. Zend_Db_Table_Row

7.5.1. Wprowadzenie

Zend_Db_Table_Row jest klasą obsługi wiersza danych dla Zend Framework. W zasadzie nie tworzysz sam instancji Zend_Db_Table_Row; otrzymujesz obiekt Zend_Db_Table_Row jako wartość zwracaną przez metodę Zend_Db_Table::find() lub Zend_Db_Table::fetchRow(). Kiedy masz instancję Zend_Db_Table_Row, możesz edytować wartości rekordu (reprezentowane jako właściwości klasy) i następnie zapisać zmiany za pomocą metody save() spowrotem w tabeli.

7.5.2. Pobieranie wiersza

Pierwsza rzecz do zrobienia to utworzenie instancji klasy Zend_Db_Table.

<?php
// przygotujmy adapter
require_once 'Zend/Db.php';
$params = array (
    'host'     => '127.0.0.1',
    'username' => 'malory',
    'password' => '******',
    'dbname'   => 'camelot'
);

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

// ustawmy domyślny adapter dla wszystkich obiektów Zend_Db_Table
require_once 'Zend/Db/Table.php';
Zend_Db_Table::setDefaultAdapter($db);

// połączmy się z tabelą w bazie danych
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>
        

Następnie pobieramy jeden rekord z bazy danych używając metody Zend_Db_Table::find() z pojedynczym kluczem, lub używając metody Zend_Db_Table::fetchRow(). Zwrócony rezultat będzie obiektem Zend_Db_Table_Row gdzie każda właściwość obiektu jest nazwą w postaci "camelCaps" zmapowaną na nazwy kolumn "underscore_words" z tabeli. Np., nazwa kolumny "first_name" z tabeli stanie się nazwą "firstName" właściwości obiektu.

<?php
// pobierzmy rekord z tabeli jako obiekt Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

//
// $row jest teraz obiektem Zend_Db_Table_Row z publicznymi właściwościami
// które odpowiadają kolumnom tabeli:
//
// $row->id = '3'
// $row->nobleTitle = 'Sir'
// $row->firstName = 'Robin'
// $row->favoriteColor = 'yellow'
//

?>
        

7.5.3. Modyfikowanie wartości

Modyfikowanie wartości jest bardzo proste: po prostu używaj wartości obiektu w taki sam sposób jak w każdym innym obiekcie. Wtedy możesz użyć metody save() aby zapisać zmiany w wierszu tabeli.

<?php
// połączmy się z tabelą w bazie danych
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// pobierzmy rekord z tabeli jako obiekt Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

//
// $row jest teraz obiektem Zend_Db_Table_Row z publicznymi właściwościami
// które odpowiadają kolumnom tabeli:
//
// $row->id = '3'
// $row->nobleTitle = 'Sir'
// $row->firstName = 'Robin'
// $row->favoriteColor = 'yellow'
//
// zmieniamy ulubiony kolor i zapisujemy zmiany w tabeli.
$row->favoriteColor = 'blue';'
$row->save();
?>
        

Jakkolwiek, nie możesz zmienić wartości klucza podstawowego; jeśli spróbujesz, Zend_Db_Table_Row wyrzuci wyjątek.

<?php
// połączmy się z tabelą w bazie danych
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();

// pobierzmy rekord z tabeli jako obiekt Zend_Db_Table_Row
$row = $table->fetchRow('first_name = "Robin"');

// czy możemy zmienić klucz podstawowy "id"?
try {
    $row->id = 5;
    echo "Nie powinniśmy zobaczyć tej wiadomości, ponieważ powinien być wyrzucony wyjątek.";
} catch (Zend_Db_Table_RowException $e) {
    echo $e->getMessage();
}
?>