Generischer O/R-Mapper - Update der Datenbank

Bitte beachten Sie, dass die vorliegende Dokumentation bis einschließlich Release 1.16 gilt. Ab Version 1.17 finden Sie die Informationen zum Update der Datenbank im Kapitel Aktualisierung der Datenbank.

Seit dem Release 1.11 ist ein Update-Tool für den Generischer O/R-Mapper verfügbar, das die Änderungen an den Konfigurations-Dateien auf eine vorhandene Datenbank anwendet.

Sofern kein automatisiertes Update gewüscht ist, bietet die Klasse GenericORMapperUpdate zudem die Möglichkeit, die Update-Statements für eine manuelle Anwendung auszugeben. Für große Datenbanken wird ohnehin ein manuelles Update empfohlen, insbesondern wenn Indizes oder Spalten erzeut oder entfernt werden!

Das Update-Tool besitzt derzeit noch die Einschränkung, dass bei einigen MySQL-Versionen Spalten mit DEFAULT-Werten nochmals mit einem Update-Statement belegt werden, ob wohl sich die Definition nicht ändert. Dies wird - sofern möglich - in den folgenden Versionen behoben. Die Tatsache stellt jedoch keine Einschränkung der Funktion des Update-Tools dar!

Das folgende Skript zeigt, wie ein Datenbank-Update mit Hilfe des GenericORMapperUpdate automatisiert vorgenommen werden kann. Eine Vorlage für dieses Skript befindet sich zudem im Ordner /apps/modules/genericormapper/data/tools des jeweiligen apf-codepack-* Releases und trägt den Namen update.php. Dieses muss gemäß den Bemerkungen unterhalb der Codebox für den entstprechenden Anwendungsfall angepasst werden. Hier das Setup-Skript im Überblick:

PHP-Code
// include page controller require('../../apps/core/pagecontroller/pagecontroller.php'); // configure the registry if desired Registry::register('apf::core','Environment','{ENVIRONMENT}'); // include SetupMapper import('modules::genericormapper::data::tools','GenericORMapperUpdate'); // create update tool $update = new GenericORMapperUpdate(); // set Context (important for the configuration files!) $update->setContext('{CONTEXT}'); // adapt storage engine (default is MyISAM) //$update->setStorageEngine('MyISAM|INNODB'); // adapt data type of the indexed columns, that are used for object and relation ids //$update->setIndexColumnDataType('INT(5) UNSIGNED'); // update database layout $update->updateDatabase('{CONFIG_NAMESPACE}','{CONFIG_NAME_AFFIX}','{CONNECTION_NAME}'); // display statements only $update->updateDatabase('{CONFIG_NAMESPACE}','{CONFIG_NAME_AFFIX}','{CONNECTION_NAME}',false);

Die eingesetzten Platzhalter haben folgende Bedeutung:

  • {ENVIRONMENT}: Umgebungsvariable der Applikation. Diese wird bei der Adressierung von Konfigurationsdateien verwendet und muss auf den Wert gesetzt werden, der auch in der Zielanwendung verwendet wird. Siehe hierzu Kapitel Konfiguration.
  • {CONTEXT}: Context der Applikation. Dieser wird zur Addressierung der Konfigurationsdateien verwendet und muss auf den Wert gesetzt werden, der auch in der Zielanwendung verwendet wird. Siehe hierzu Kapitel Konfiguration.
  • {CONFIG_NAMESPACE}: Namespace, unter dem die Konfigurationsdateien für den O/R-Mapper liegen (siehe Kapitel 2.2).
  • {CONFIG_NAME_AFFIX}: Namenszusatz der Konfigurationsdateien (siehe Kapitel 2.1).
  • {CONNECTION_NAME}: Name der Datenbankverbindung, die für das Setup genutzt werden soll.

Weiterhin ist wichtig, dass die zu aktualisierende Datenbank bereits existiert und der in der Verbindungskonfiguration aufgeführte Benutzer CREATE TABLE-, ALTER TABLE- und, falls gewünscht, ALTER INDEX-Rechte für diese besitzt. Wird nach der Ausführung des Codes kein Fehler angezeigt, wurde das Setup erfolgreich abgeschlossen. Das Ergebnis kann dann beispielsweise mit phpMyAdmin oder dem MySQLAdmin überprüft werden.

Bitte beachten Sie folgende wichtige Grundregeln:
  • Große Datenbanken sollten keinesfalls automatisiert aktualisiert werden!
  • Bei der Umbenennung von Spalten werden spezifisch angelegte Indizes nicht beachtet und u.U. gelöscht!

Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.