5.5. Zend_Db_Table_Row

5.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.

5.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'
//

?>
        

5.5.3. Werte ändern

Einen Wert zu Ändern ist sehr einfach: 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 die Primary Key Werte 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 Primary Key "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();
}
?>