Basierend auf dem vorherigen Beitrag Zend: Datenbank Connection bereitstellen wollen wir hier die Arbeitsweise mit dem TableGateway und dem RowGatewayFeature erklären:
Die Verwendung des TableGateways ist sehr einfach wie der Code Ausschnitt aus einem Customer Controller bzw. dessen editAction zeigt:
$output = array(); $adapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'); $customerTable = new TableGateway("customer", $adapter); $rows = $customerTable->select(); foreach($rows as $row) { print_r($row); }
Das TableGateway liefert uns als Result lediglich “repräsentative Objekte” zurück, welche zwar gelesen werden können aber sonst keine weitere Funktionalitäten besitzen.
Wer Daten lediglich anzeigen möchte, für den ist das TableGateway vollkommen ausreichen.
Möchte man mit den Daten weiter arbeiten, beispielsweise Save oder Delete Operationen darauf anwenden, dem sei das RowGateway ans Herz gelegt.
Im folgenden Zeigen wir das RowGatewayFeature:
$customerTable = new TableGateway("customer", $adapter, new RowGatewayFeature('id'));
Die Initialisierung des TableGateways haben wir nun geändert, in dem wir eine RowGatewayFeature Instanz übergeben. Der ‘id’ Parameter kennzeichnet den Primary Key in der entsprechenden Datenbank Tabelle. Durch diese Änderung liefert uns das TableGateway nun keine Arrays oder ArrayObjects mehr zurück, sondern wir erhalten eine Collection von RowGateways. Diese RowGateway Objekte besitzen von Hause aus eine Save() und Delete() Methode, die uns die Arbeit abnehmen. RowGateway Objekte können sich also um ihre eigene “Persitenz” kümmern.
$customerTable = new TableGateway("customer", $adapter, new RowGatewayFeature('id')); $rows = $customerTable->select(); $customer = $rows->current(); $customer->city = "Berlin"; $customer->save(); // ->delete();