Migrationen und Startdaten: .dba-Schemadateien und Pakete
Diese Seite richtet sich an Entwickler, die doctrine:migrations:migrate, php artisan migrate, manage.py migrate
oder rails db:migrate ausführen. Tabellen werden in datenbankneutralen .dba-Dateien beschrieben, durch Befehle
angelegt und durch Upgrade-Schritte geändert, die Sie selbst schreiben und mitliefern. Inhaltsklassen und Inhalte
werden mit Paketen übertragen. Seit 6.0.15 hat eine Site außerdem Migrationen, nahe an dem, was Sie kennen:
Dateien YYYYMMDDHHMMSS_name.php in migrations/, der Reihe nach ausgeführt von ./console exp:migration:migrate,
festgehalten in der Tabelle exp_migration, mit down() zum Zurücknehmen (Migrationen).
Sagen Sie das früh im Projekt; es verändert, wie ein Release geplant wird.
Inhalt
- Die Bausteine
- Das .dba-Format
- Ein Schema anlegen und installieren
- Upgrades: Ihre eigenen Migrationsschritte
- Startdaten und Inhalte
- Im Vergleich mit Migrationswerkzeugen
Die Bausteine
| Bedarf | Exponential |
|---|---|
| Tabellen für jede Datenbank beschreiben | extension/<ext>/share/db_schema.dba |
| Startdatensätze | extension/<ext>/share/db_data.dba |
| Die Tabellen anlegen | ezsqlinsertschema.php oder ein Installationsbefehl Ihrer Erweiterung |
| Schemas vergleichen | ezsqldiff.php |
| Inhaltsklassen und Inhalte | Pakete (.ezpkg), installiert unter Setup > Pakete oder mit ezpm.php |
| Änderungen nach dem ersten Release | Upgrade-Skripte in Ihrer Erweiterung |
Das .dba-Format
Eine .dba-Datei ist ein PHP-Array von Tabellen, jede mit Feldern (Typ, Länge, Standardwert, not null), Indizes und
dem Primärschlüssel. Das eigene Schema des Kernels ist share/db_schema.dba, seine Daten liegen in
share/db_data.dba. Die Klasse, die sie liest und schreibt, ist eZDbSchema (lib/ezdbschema/); sie erzeugt aus
derselben Datei das SQL für SQLite, PostgreSQL, MySQL/MariaDB und Oracle
(Datenbankschema und .dba-Dateien).
Ein Schema anlegen und installieren
Legen Sie die Tabelle in einer Entwicklungsdatenbank an und exportieren Sie dann nur Ihre Tabellen:
php bin/php/ezsqldumpschema.php --type=sqlite --table-include=expdemo_item --output-array \
var/storage/sqlite3/exponential.db extension/expdemo/share/db_schema.dba --allow-root-userInstallieren Sie es in einer Datenbank:
php bin/php/ezsqlinsertschema.php --type=mysql --user=<user> extension/expdemo/share/db_schema.dba <database>Besser: Geben Sie Ihrer Erweiterung einen idempotenten Befehl, der fehlende Tabellen anlegt, so wie expqueue es mit
./console ext:expqueue:install-schema tut. Ein Skript in extension/expdemo/bin/php/install-schema.php wird ohne
Registrierung zu ./console ext:expdemo:install-schema (Kommandozeile).
Upgrades: Ihre eigenen Migrationsschritte
- Ändern Sie eine veröffentlichte Tabelle nie direkt ohne einen Upgrade-Schritt.
- Liefern Sie Upgrade-Schritte als nummerierte Skripte oder SQL-Dateien pro Datenbank-Engine aus (zum Beispiel in
extension/<ext>/update/), und lassen Sie Ihren Installationsbefehl die fehlenden anwenden. Halten Sie in einer eigenen kleinen Tabelle oder Einstellung fest, was gelaufen ist; der Kernel führt darüber kein Buch für Sie. - Fügen Sie Spalten mit Standardwerten hinzu, damit der alte Code während des Deployments weiter funktioniert.
- Schreiben Sie Schritte, die nach Möglichkeit nur hinzufügen, damit ein Rollback des Codes auch mit dem neuen Schema noch läuft.
- Prüfen Sie Datenänderungen Zeile für Zeile, nicht anhand eines Diffs: Eine
.dbaist ein PHP-Array, und das Entfernen einer Zeile nummeriert den Rest neu.
Startdaten und Inhalte
| Startdaten | Verwendung |
|---|---|
| Zeilen Ihrer eigenen Tabellen | db_data.dba neben dem Schema |
| Inhaltsklassen, von denen Ihr Code abhängt | ein Klassenpaket, das Ihr Installationsbefehl installiert; halten Sie die Bezeichner stabil (Inhaltspakete) |
| Demo- oder Startinhalte | ein Inhaltspaket oder eZContentFunctions::createAndPublishObject() mit Remote-IDs, sodass ein zweiter Durchlauf aktualisiert statt zu duplizieren |
| Test-Fixtures | eine Wegwerf-Datenbank für Integrationstests (Testen) |
php ezpm.php list --allow-root-user
php ezpm.php import var/tmp/<package>.ezpkg --allow-root-userIm Vergleich mit Migrationswerkzeugen
| Migrationswerkzeuge bieten | Exponential |
|---|---|
| Aus Modelländerungen erzeugte Migrationen | nein: Schema exportieren und den Upgrade-Schritt schreiben |
up() und down() | nur Upgrade-Schritte; ein Rollback ist das Zurückspielen einer Sicherung plus der vorherige Code |
| Eine Tabelle, die festhält, was gelaufen ist | führen Sie selbst, falls Sie eine brauchen |
| Ein Befehl für alles | der Installationsbefehl Ihrer Erweiterung, im Deployment ausgeführt |
| Änderungen am Inhaltsmodell in Migrationen | Pakete und Upgrade-Schritte für Klassen |
Die Deployment-Reihenfolge, die sich daraus ergibt, steht unter Server und Deployment und Eine Deployment-Pipeline.
Verwandte Seiten
- Datenbankschema und .dba-Dateien
- Paket-Assistent
- CLI des Paketmanagers ezpm
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.