Skip to main content

Was sind Migrationen

Migrationen sind gewissermaßen Versionskontrolle für die Datenbank. Sie erlauben es einem Team, Definitionen des Datenbankschemas gemeinsam zu pflegen. Sie kennen bestimmt die Situation, in der Sie nach einem Pull der Sourcen Kollegen bitten müssen, eine Spalte manuell in ihrer Datenbank zu ergänzen. Migrationen lösen genau dieses Problem. Migrationsdateien liegen im Verzeichnis database/migrations. Der Dateiname enthält einen Zeitstempel, über den Laravel die Reihenfolge der Ausführung bestimmt.

Migration erzeugen

Erzeugen Sie eine neue Migrationsdatei mit make:migration.
Aus dem Migrationsnamen leitet Laravel den Tabellennamen ab und legt einen passenden Stub an. Bei create_posts_table wird bereits Code zum Anlegen der Tabelle posts erzeugt.

Aufbau einer Migration

Eine Migrationsklasse hat zwei Methoden: up und down.
  • up: Fügt Tabellen, Spalten oder Indexe hinzu.
  • down: Kehrt up um. Wird beim Rollback aufgerufen.

Wichtige Spaltenmethoden

Die Klasse Blueprint bietet zahlreiche Spaltentypen.

Spaltenmodifikatoren

Über Method-Chaining fügen Sie Modifikatoren hinzu.

Vektorspalten und -indizes

Die Methode vector erstellt eine vector-Spalte zum Speichern von Embedding-Vektoren. Setze dimensions auf die Ausgabedimension des von dir verwendeten Embedding-Anbieters.
Vektorspalten sind auf PostgreSQL-Verbindungen mit der pgvector-Erweiterung sowie auf MariaDB 11.7 oder neuer verfügbar. Aktiviere unter PostgreSQL pgvector, bevor du eine Vektorspalte anlegst.
Um Ähnlichkeitssuchen über Vektoren zu beschleunigen, füge der vector-Spalte einen index hinzu. Dieser Index verwendet die Kosinus-Distanz.
Um einen bestehenden Vektorindex zu entfernen, nutze dropVectorIndex.

Online-Indexerstellung

Wenn du einen Index auf einer großen Tabelle erstellst, wird die Tabelle in der Regel während des Aufbaus des Index gesperrt und Lese- und Schreibzugriffe müssen warten. In MySQL kannst du das Modifikator inplace an eine Index- oder Fremdschlüssel-Definition anhängen, um die Operation mit dem INPLACE-Algorithmus auszuführen.
Kombiniere inplace mit dem Modifikator lock, um die Tabellensperre während der Operation zu steuern. Mit none bleiben Lese- und Schreibzugriffe für Operationen möglich, die MySQL zulässt.
Dieses Feature ist MySQL-spezifisch. Prüfe in der MySQL-Dokumentation zu Online-DDL-Operationen, ob die Operation, die du ausführst, den INPLACE-Algorithmus und den angegebenen Lock-Modus unterstützt. Wenn du inplace für Fremdschlüssel-Operationen verwendest, deaktiviere zuvor die Fremdschlüssel-Constraints.

Migrationen ausführen

Führen Sie alle ausstehenden Migrationen mit migrate aus.
Den Status prüfen Sie mit migrate:status.
In Produktion erscheint bei migrate eine Bestätigungsabfrage. Zur unbeaufsichtigten Ausführung nutzen Sie --force, achten Sie aber auf potenziellen Datenverlust.

Rollback

Setzen Sie die letzte Migrations-Batch mit migrate:rollback zurück.
Mit --step beschränken Sie den Rollback auf eine bestimmte Anzahl.
Um alles zurückzusetzen und erneut auszuführen, nutzen Sie migrate:refresh.
migrate:refresh legt alle Tabellen neu an – bestehende Daten gehen verloren. Praktisch zum Zurücksetzen der Entwicklungs-DB.

Beispiel: posts-Tabelle anlegen

Kompletter Ablauf am Beispiel einer Blog-Post-Tabelle.

1. Migration erzeugen

2. Migration bearbeiten

Öffnen Sie database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php und passen Sie den Inhalt an.

3. Migration ausführen

Die Tabelle posts wird angelegt.

4. Nachträglich Spalten hinzufügen

Um später weitere Spalten zu ergänzen, erstellen Sie eine neue Migration, statt bestehende zu ändern.
Bearbeiten Sie bestehende Migrationen möglichst nicht direkt. Es entstehen Inkonsistenzen zu Kollegen und Produktion. Änderungen werden immer als neue Migrationen hinzugefügt.

Migrations-Events

Bei jedem Migrationsschritt werden Events gefeuert. Alle erben von Illuminate\Database\Events\MigrationEvent. Beispiel: nach Abschluss der Migrationen den Cache leeren.

Nächste Schritte

Datenbank-Seeding

Legen Sie Beispieldaten in Ihren Tabellen an.

Einstieg in Eloquent

Arbeiten Sie mit Ihren Tabellen über das Eloquent ORM.
Zuletzt geändert am 22. September 2026