9.5. Zend_Db_Table_Row
Poprzedni | Rozdział 9. Zend_Db | Następny

## 9.5. Zend_Db_Table_Row

### 9.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.

### 9.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'
    //

    ?>

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

Poprzedni | Początek rozdziału | Następny
9.4. Zend_Db_Table | Spis treści | 9.6. Zend_Db_Table_Rowset