Base-Data Import
Nach der Ausführung der Migrationen liegt eine leere Datenbank vor. Für die Entwicklung werden Basisdaten benötigt.
Schnellstart
# Basisdaten importieren
php artisan hermeneus:import-base-dataDas war's! Die Daten liegen im Git-Submodule database/base-data und werden automatisch mit dem Projekt versioniert.
Die Datenbank enthält nun alle Basisdaten für die Entwicklung.
Importierte Daten
Der Standard-Import liefert 5.912 Datensätze aus 22 Tabellen:
- Basis (4 Tabellen): System-User (100, 179), Test-Accounts, Gruppen, Reihen
- Glossarium (6 Tabellen): Alle validierten Vokabel-Einträge (Nomina, Verben, Adjektive, etc.)
- Grammatik (1 Tabelle): Alle Grammatik-Einträge
- CCBuchner (11 Tabellen): Bücher, Lerneinheiten, Texte, Textconfig
Wichtig: Übungen werden NICHT importiert (zu individuell, müssen manuell erstellt werden).
Import-Befehl
Basis-Syntax
php artisan hermeneus:import-base-data [Optionen]Standard-Pfad: database/base-data (Git-Submodule, kein Pfad-Argument nötig!)
Die wichtigsten Optionen
| Option | Zweck | Wann verwenden? |
|---|---|---|
--clean | Tabellen vor Import leeren | Immer bei Clean-Import (Standard) |
--force | Foreign Key Checks deaktivieren | Bei FK-Fehlern oder für Speed |
--no-interaction | Keine Bestätigungsabfragen | Automatisierte Workflows |
--dry-run | Nur Validierung, kein Import | Test vor erstem Import |
--groups= | Nur bestimmte Datengruppen | Selektiver Import (minimum, glossarium, grammatik, ccbuchner) |
Standard-Import (90% aller Fälle)
php artisan hermeneus:import-base-dataDieser Befehl importiert automatisch aus database/base-data (Git-Submodule). Kein manuelles Kopieren mehr nötig!
Mit Optionen (falls gewünscht):
php artisan hermeneus:import-base-data --clean --force --no-interactionTypische Szenarien
Lokale Entwicklung starten
Nach dem Clonen des Projekts und der Ausführung der Migrationen:
# 1. Git-Submodule initialisieren (einmalig)
git submodule update --init --recursive
# 2. Basisdaten importieren
php artisan hermeneus:import-base-data
# 3. Verifizieren
php artisan tinker
>>> \App\Models\User::count() # Sollte >5 sein (Test-Accounts)
>>> \App\Models\Buch::count() # Sollte >0 sein (CCBuchner-Bücher)Test-Datenbank befüllen
Für Tests mit echten Daten:
# Import in Testing-Datenbank
php artisan hermeneus:import-base-data --connection=testingNach Migration neu befüllen
Nach Änderungen an der Datenbankstruktur und zur Neuinitialisierung:
# 1. Migrationen neu ausführen
php artisan migrate:fresh
# 2. Daten importieren
php artisan hermeneus:import-base-dataNur Vokabular importieren
Für den Import ausschließlich von Vokabeln (ohne Bücher):
php artisan hermeneus:import-base-data --groups=minimum,glossarium --cleanFehlerbehebung
Foreign Key Constraint Fehler
Symptom: SQLSTATE[23000]: Integrity constraint violation
Lösung:
# Foreign Key Checks temporär deaktivieren
php artisan hermeneus:import-base-data [PFAD] --forceDas System deaktiviert FK-Checks während des Imports und aktiviert sie danach wieder.
Duplicate Entry Fehler
Symptom: Duplicate entry '123' for key 'PRIMARY'
Lösung:
# Tabellen vor Import leeren
php artisan hermeneus:import-base-data [PFAD] --cleanVorsicht: --clean löscht ALLE Daten in den betroffenen Tabellen!
Tabelle existiert nicht
Symptom: Table 'database.table_name' doesn't exist
Lösung:
# Migrationen ausführen
php artisan migrate
# Import wiederholen
php artisan hermeneus:import-base-data [PFAD]Import dauert zu lange
Lösungen:
# 1. Foreign Key Checks deaktivieren (beschleunigt Import)
php artisan hermeneus:import-base-data --force
# 2. Nur benötigte Gruppen importieren
php artisan hermeneus:import-base-data --groups=minimum,glossarium
# 3. CCBuchner-Daten weglassen (größte Gruppe)
php artisan hermeneus:import-base-data --groups=minimum,glossarium,grammatikImport-Phasen
Der Import erfolgt automatisch in 5 Phasen, um Foreign-Key-Abhängigkeiten zu respektieren:
- Basis: users, reihen
- Referenzen: groups, glossarium_*, grammatik, buecher
- Ressourcen: buch_resource
- Lerneinheiten: lerneinheiten, lerneinheit_vocab, lerneinheit_grammatik, lerneinheit_user
- Texte: textconfig, hermeneus_texte_vorlagen, lerneinheit_text, hermeneus_texte
Das System wählt automatisch die korrekte Reihenfolge - keine manuelle Konfiguration erforderlich.
Erweiterte Nutzung
Dry-Run (empfohlen vor erstem Import)
php artisan hermeneus:import-base-data --dry-runDieser Modus validiert den Export, führt jedoch keinen Import durch. Geeignet für Tests vor dem eigentlichen Import.
Spezifische Datenbank-Connection
# Import in bestimmte DB
php artisan hermeneus:import-base-data --connection=testingMetadaten prüfen
# Export-Statistiken anzeigen
cat database/base-data/metadata.json
# Mit jq formatiert:
cat database/base-data/metadata.json | jqWichtige Felder:
exported_groups: Enthaltene Datengruppentotal_tables: Anzahl der Tabellentotal_records: Anzahl der Datensätzefilter_descriptions: Beschreibung der angewendeten Filter
Verzeichnisstruktur
Die Verzeichnisstruktur des Git-Submodules:
database/base-data/ # Git-Submodule (versioniert)
├── metadata.json # Metadaten des Exports
├── minimum/ # System-User, Gruppen, Reihen
│ ├── users.json
│ ├── groups.json
│ └── reihen.json
├── glossarium/ # Vokabel-Einträge
│ ├── glossarium_nomina.json
│ ├── glossarium_verben.json
│ ├── glossarium_adjektive.json
│ └── ...
├── grammatik/ # Grammatik-Einträge
│ └── grammatik.json
└── ccbuchner/ # CCBuchner-Inhalte
├── buecher.json
├── lerneinheiten.json
├── textconfig.json
├── hermeneus_texte.json
└── ...Wichtig: Die Daten liegen in einem separaten Git-Repository als Submodule und werden automatisch mit dem Projekt versioniert.
Test-Accounts
Nach dem Import stehen folgende Test-Accounts zur Verfügung:
| Username | Rolle | Passwort |
|---|---|---|
| bruce.wayne | admin | hermeneus#17 |
| harvey.dent | editor | hermeneus#17 |
| james.gordon | tester | hermeneus#17 |
| selina.kyle | teacher | hermeneus#17 |
| joker | user | hermeneus#17 |
Best Practices
Vor jedem Clean-Import
# 1. Backup erstellen (optional, aber empfohlen)
mysqldump -u user -p database > backup_$(date +%Y%m%d).sql
# 2. Dry-Run durchführen
php artisan hermeneus:import-base-data --dry-run
# 3. Import
php artisan hermeneus:import-base-data --clean --force --no-interactionNach Import: Verifikation
php artisan tinker
>>> \App\Models\User::count()
>>> \App\Models\Buch::count()
>>> \App\Models\HermeneusText::where('user_id', 179)->count()
>>> \App\Models\GlossariumVerb::where('status', 2)->count()Sicherheit
- Das Git-Submodule
database/base-dataist versioniert und wird automatisch aktualisiert - Test-Accounts verwenden gehashte Passwörter (Passwort:
hermeneus#17) - Produktionsdaten nur in Entwicklungs-/Testumgebungen importieren
Logs
# Import-Logs verfolgen
tail -f storage/logs/laravel.log | grep "Base-Data-Import"Weiterführende Infos
- Export erstellen: Siehe
Base-Data Export.md - Technische Details: Service-Klassen in
/app/ServiceClasses/DataManagement/ - Filter-Logik: Export-Filter in
/app/ServiceClasses/DataManagement/ExportFilters/
Verwandte Artisan-Commands
# Liste aller Artisan-Commands
php artisan list
# Datenbank zurücksetzen
php artisan migrate:fresh
# Cache leeren
php artisan optimize:clear