7.5 Erweiterte Möglichkeiten 

Trotz der Länge und Ausführlichkeit dieses Kapitels haben Sie noch nicht alle Möglichkeiten der PersistentObject-Komponente kennengelernt. Aus diesem Grund werden alle weiteren Funktionalitäten an dieser Stelle kurz zusammengefasst.
7.5.1 Über Abfragen manipulieren 

Die Methode createFindQuery() zum Auffinden von Objektmengen haben Sie in Abschnitt 7.4.2, »Objekte auffinden«, kennengelernt. Analog dazu existieren die Methoden createDeleteQuery() und createUpdateQuery(). Beide Methoden erwarten den Klassennamen zu einem persistenten Objekt und erzeugen ein entsprechendes Anfrage-Objekt, welches Sie nach Belieben manipulieren können, um mehrere Objekte zugleich zu verarbeiten. Zum Ausführen der entsprechenden Aktion verwenden Sie anschließend die Methode deleteFromQuery() beziehungsweise updateFromQuery(), welche sich wieder analog zu find() verhalten. Beide erwarten als ersten Parameter ein Anfrage-Objekt, als zweiten Parameter den entsprechenden Klassennamen.
7.5.2 Werte auffrischen 

Eine weitere praktische Funktionalität von PersistentObject verbirgt sich hinter der Methode refresh(). Ihr wird ein bereits persistentes Objekt übergeben, das nach dem Aufruf wieder die aktuellen Werte der Datenbank enthält. Dies ist zum einen praktisch, wenn Sie bereits Werte in dem Objekt geändert haben und diese Änderungen wieder rückgängig machen wollen, zum anderen kann es sinnvoll sein, ein Objekt zu aktualisieren, das bereits vor längerer Zeit geladen wurde und möglicherweise in der Datenbank Änderungen erfahren hat. Wollen Sie Letzteres verhindern, können Sie direkt auf die Datenbankverbindung der Persistenz-Sitzung zugreifen und eine Transaktion starten.
7.5.3 Direkt mit der Datenbank arbeiten 

Auch wenn die PersistentObject-Komponente bereits einen sehr großen Teil der Standardoperationen auf Datenbankobjekten unterstützt, kann es dennoch sein, dass Sie irgendwann an eine Grenze stoßen, bei der Sie nicht in der Lage sind, das gewünschte Verhalten zu emulieren. Für diesen Fall erlaubt ezcPersistentSession den direkten Zugriff auf die verwendete Datenbankverbindung über das Attribut $database.
Eine Warnung darf aber an dieser Stelle nicht ausbleiben: Beim direkten Zugriff auf die Datenbank gehen Ihnen alle Vorteile von PersistentObject verloren. Sie müssen an dieser Stelle wiederum wissen, mit welchen Datenbanktabellen zu arbeiten ist und wie diese aufgebaut sind. Verwenden Sie hingegen nur Persistent-Object zur Realisierung von Datenbankzugriffen, erhalten Sie die Möglichkeit, Änderungen am Datenbankschema nur an einer zentralen Stelle nachvollziehen zu müssen: in der PersistentObject-Konfiguration.




Ihre Meinung






