9.5. Zend_Db_Table_Row
Zurück | Kapitel 9. Zend_Db | Weiter

## 9.5. Zend_Db_Table_Row

### 9.5.1. Einführung

Zend_Db_Table_Row ist ein Zeilen-Daten Gateway für das Zend Framework. Normalerweise muß Zend_Db_Table_Row nicht direkt instanziiert werden, stattdessen wird eine Zend_Db_Table_Row als Ergebnis durch Zend_Db_Table::find() oder Zend_Db_Table::fetchRow() zurückgegeben. Sobald man eine Zend_Db_Table_Row hat, kann man den Inhalt ändern (dargestellt als Klassen Werte) und anschließend die Änderungen mit save() in die originale Tabelle zurückspeichern.

### 9.5.2. Zeilen holen

Das Erste das gemacht werden muß, ist die Zend_Db_Table Klasse zu instanziieren.

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

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

    // Den Default Adapter für alle Zend_Db_Table Objekte setzen
    require_once 'Zend/Db/Table.php';
    Zend_Db_Table::setDefaultAdapter($db);

    // Zu einer Tabelle in der Datenbank verbinden
    class RoundTable extends Zend_Db_Table {}
    $table = new RoundTable();
    ?>

Anschließend kann eine Zeile von der Datenbank empfangen werden durch Verwendung von Zend_Db_Table::find() mit einem einzelnen Schlüssen oder durch Verwendung von Zend_Db_Table::fetchRow(). Das zurückgegebene Ergebnis ist ein Zend_Db_Table_Row Objekt, wobei jede Eigenschaft im Objekt ein "camelCaps" Name ist, welcher auf einen "unterstrich_Wort" Spaltennamen der Tabelle verweist. Z.B. "first_name" in der Tabelle wird "firstName" in den Eigenschaften des Objektes.

    <?php
    // Einen Eintrag aus der Tabelle als Zend_Db_Table_Row Objekt holen
    $row = $table->fetchRow('first_name = "Robin"');

    //
    // $row ist jetzt ein Zend_Db_Table Objekt mit Public Eigenschaften
    // welches die folgenden Tabellen Spalten abbildet:
    //
    // $row->id = '3'
    // $row->nobleTitle = 'Sir'
    // $row->firstName = 'Robin'
    // $row->favoriteColor = 'yellow'
    //

    ?>

### 9.5.3. Werte ändern

Einen Wert zu ändern, ist sehr einfach: man muss nur mit den Objekt Eigenschaften arbeiten, so wie mit denen von jedem anderen Objekt. Anschließend kann mit save() die Zeile in die Tabelle zurückgespeichert werden.

    <?php
    // Zu einer Tabelle in der Datanbank verbinden
    class RoundTable extends Zend_Db_Table {}
    $table = new RoundTable();

    // Einen Eintrag von der Tabelle als Zend_Db_Table_Row objekt holen
    $row = $table->fetchRow('first_name = "Robin"');

    //
    // $row ist jetzt ein Zend_Db_Table Objekt mit Public Eigenschaften
    // welches die folgenden Tabellen Spalten abbildet:
    //
    // $row->id = '3'
    // $row->nobleTitle = 'Sir'
    // $row->firstName = 'Robin'
    // $row->favoriteColor = 'yellow'
    //
    // Ändern der favoritColor Eigenschaft und zurückspeichern in die Tabelle.
    $row->favoriteColor = 'blue';'
    $row->save();
    ?>

Trotzdem ist es nicht erlaubt, den Wert des Primärschlüssels zu ändern; Wenn das versucht wird, wird Zend_Db_Table_Row eine Exception werfen.

    <?php
    // Zu einer Tabelle in der Datenbank verbinden
    class RoundTable extends Zend_Db_Table {}
    $table = new RoundTable();

    // Einen Eintrag von der Tabelle als Zend_Db_Table_Row objekt holen
    $row = $table->fetchRow('first_name = "Robin"');

    // Kann der Primärschlüssel "id" verändert werden ?
    try {
        $row->id = 5;
        echo "Diese Meldung wird nicht angezeigt, da eine Exception geworfen wird.";
    } catch (Zend_Db_Table_RowException $e) {
        echo $e->getMessage();
    }
    ?>

Zurück | Nach oben | Weiter
9.4. Zend_Db_Table | Zum Anfang | 9.6. Zend_Db_Table_Rowset