Kategorien
Laravel

#Kapitel 2: Datenbank

Kurz mal eine Datenbank aufsetzen, eine Tabelle erstellen und dann dazu die Anwendung programmieren… keine gute Idee, wenn man in einem größeren Team arbeitet. Jahre später sind wahrscheinlich auch sonstige Tabellen z. B. für Ad hoc Auswertungen oder ähnliches entstanden und niemand weiß mehr, welche Tabellen eigentlich noch für die Anwendung relevant sind und welche nur mal so angelegt wurden. Die Lösung ist einfach: auch das Datenbank-Schema unter Versionsverwaltung stellen. Dafür gibt es die „Migrations“. Ich selbst habe bisher gerne Liquibase (https://www.liquibase.org/) verwendet, möchte nun aber die Laravel eigene Umsetzung dieser Idee verwenden.

Grundlage ist die Dokumentation hier: ttps://laravel.com/docs/8.x/migrations#introduction

Konfiguration der Datenbank

In der .env Datei im Wurzelverzeichnis des Projekts muss die korrekte Datenbankverbindung angegeben werden. Das kann eine MySQL Verbindung sein oder der Einfachheit halber eine sqlite Verbindung:

DB_CONNECTION=sqlite
DB_DATABASE=storage/app/database.sqlite
DB_FOREIGN_KEYS=true

Ich denke ich muss nicht erwähnen, dass in PHP die entsprechenden Extensions eingebunden sein müssen, damit der Zugriff auf die DB funktioniert.

Beispiel für Sqlite:

extension=php_pdo_sqlite.dll
extension=php_sqlite3.dll

Erzeugen einer Migrationsdatei

Im Projektverzeichnis folgenden Befehl ausführen:

php artisan make:migration create_flights_table
Erzeugung Migration: Der letzte Parameter ist der Tabellenname?

Was ist passiert? Im Verzeichnis /database/migrations ist eine neue Datei erzeugt worden.

Die Tabelle heißt „flights“… okay…

Die Dokumentation ist leider an der Stelle etwas sparsam. Ich habe ein paar Versuche mit den zusätzlichen Parametern –table und –create durchgeführt z. B.:

php artisan make:migration my_file_name_for_table_test1 --table=test1

Der Befehl erzeugt eine Migrationsdatei ohne die zusätzlichen Anweisungen für id und timestamps

Mit dem Parameter –create kommen die zusätzlichen Anweisungen mit. Was immer man auch bevorzugt, ich persönlich nutze die „einfache“ Variante und passe die Migration anschließend für meine Zwecke an:

php artisan make:migration create_[Tabellenname]_table

Migrationsdatei ausführen

Das erfolgt über den Befehl:

php artisan migrate

Erweitern

Die Tabelle test hat bisher nur drei Spalten (id, created_at, updated_at) und nun möchte ich diese um eine weitere Spalte name ergänzen. Im Allgemeine ist dafür der Schema Builder verantwortlich. Die Dokumentation findet sich hier: https://laravel.com/docs/5.0/schema

Im ersten Schritt eine neue Migrationsdatei anlegen:

php artisan make:migration update_test_table

Anschließend passe ich die generierte Datei an:

Spalte „name“ der Tabelle „test“ hinzufügen

Die Anweisung in Zeile 17 sorgt dafür, dass der Datentyp varchar verwendet wird. Der zweite Parameter spielt für sqllite keine Rolle, für andere Datenbanken wird die Länge des Datentyps definiert.

Das Ausführen der Migration kennen wir ja schon:

php artisan migrate