© GoodStudio/Shutterstock.com
Was mit Eloquent ORM möglich ist - erklärt am Beispiel Buchverleihtool

Laravel ORM im Einsatz


Eloquent, das ORM (Object-relational Mapping) von Laravel, erleichtert die Kommunikation mit einer Datenbank ungemein. Anhand eines JSON API für ein Buchverleihtool zeigen wir, was man damit anstellen kann – komplett unabhängig vom dahinterliegenden Datenbanksystem.

Laravel ist schon seit vielen Jahren eins der wohl beliebtesten PHP Frameworks. Das liegt u. a. daran, dass man mit Hilfe von Laravel schnell sowohl komplexe als auch sichere Webapplikationen erstellen kann. Der Entwicklungsprozess wird dadurch in vielen Bereichen – wie beispielsweise Routing, Caching, Authentifizierung, ORM u. v. a. m. – erheblich vereinfacht. Die zugehörige Dokumentation ist sehr gut gestaltet, klar strukturiert und bietet zahlreiche Codebeispiele, die selbst einem Laien den Einstieg verhältnismäßig einfach machen. Sie stellt den Grundpfeiler des Open-Source-Tools dar. Des Weiteren erfreut sich Laravel auch einer sehr großen und engagierten Community. In diesem Artikel werden wir uns auf Laravels Eloquent ORM konzentrieren und zeigen, wie man Eloquent in der Praxis einsetzt – komplett unabhängig vom dahinterliegenden Datenbanksystem.

Set-up mit Docker

Da wir auf unterschiedlichen Betriebssystemen unterwegs sind (Windows und Ubuntu Linux), haben wir uns entschieden, eine flexible Entwicklungsumgebung auf Basis von Docker zu nutzen. Die hat zusätzlich den Vorteil, dass sie uns den initialen Set-up-Prozess der einzelnen Komponenten, wie Datenbank und Webserver, deutlich vereinfacht. Die initiale Version des verwendeten Docker-Set-ups kann man auf GitHub [1] finden.

Datenbankdiagramm

Das Datenbankdiagramm (Abb. 1) haben wir mit Hilfe des Zeichentools draw.io erstellt. Wir exportieren dabei ein von draw.io generiertes SVG und speichern es ins Git Repository des Projekts. Auf diese Weise können wir sicherstellen, dass wir immer ein Diagramm haben, das die aktuelle Codebasis widerspiegelt. Natürlich müssen wir selbst dafür Sorge tragen, dass wir jede Änderung des Datenbankschemas auch wieder korrekt im Diagramm abbilden.

nezbeda_wutte_laravel_orm_1.tif_fmt1.jpgAbb. 1: Datenbankdiagramm [2]

Erstellen von Models und Migrationen

Migrationen dienen dazu, Kontrolle und Überblick über die gesamte Datenbankarchitektur zu bewahren. Zusätzlich sind damit schnelle und einfache Änderungen auf unterschiedlichsten Systemen möglich – ohne dass man sich Gedanken machen muss, ob man wohl eine Änderung übersehen hat. Mit dem Schema-Builder von Laravel wird das ganze Prinzip dahinter spielerisch einfach.

Um eine neue Migration zu erstellen, bietet sich das integrierte Kommandozeilenprogramm Artisan von Laravel an, mit dem sich Teile des Frameworks auch über das CLI steuern lassen. Dazu navigiert man mit der Konsole ins Root-Verzeichnis von Laravel und erstellt die neue Migration mit dem folgenden Command:

php artisan make:migration your_custom_migration_name

Möchte man sich eine Übersicht aller aktuell verfügbaren Artisan Commands mit zugehöriger Beschreibung anzeigen lassen, so geht das mit php artisan.

Hat man nun seine Migration erstellt, findet man im Verzeichnis database/migrations die Migrationsdatei. In ihr sind bereits zwei Methoden vorbereitet: up() und down(). Die up-Methode gibt an, was geschehen soll, wenn man die Migration ausführt, und die down-Methode, was im Fall eines Rollbacks unternommen werden soll. Wie eine solche Migration in der Praxis aussieht, zeigen wir am Beispiel einer Usertabelle des Laravel Authentication Skeleton (Listing 1).

Listing 1

use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUsersTable extends Migration { /**  * Run the migrations.  *   * @return void  */ public function up() { Schema::create( 'users', function ( Blueprint $table ) { $table->bigIncrements( 'id' ); $table->string( 'name' ); $table->string( 'email' )->unique(); $table->timestamp( 'email_verified_at' )->nullable(); $table->string( 'password' ); $table->rememberToken(); $table->timestamps(); } ); }  /**  * Reverse the migrations.  *  * @return void  */ public function down() { Schema::dropIfExists( 'users' ); } }

Mit Hilfe von Artisan können nun mit php artisan migrate die Migrationen entsprechend chronologisch abgearbeitet und auf der Datenbank ausgeführt werden.

Laravel merkt sich nebenbei, welche der vorhandenen Migrationen bereits erfolgreich ausgeführt wurden, sodass es zu keiner doppelten Ausführung kommen kann. Ist beispielsweise bei der Entwicklung einer Migration ein Fehler in der Schemadefinition gemacht worden, aber die Migration wurde bereits ausgeführt, kann man mit dem folgenden Befehl ein Rollback der zuvor ausgeführten Migration vornehmen: php artisan migrate:rollback.

Aufbau des API

Wir haben uns dazu entschlossen, für das Beispielprojekt ein JSON API gemäß der Spezifikation (v1.0) von https://jsonapi.org zu bauen. Dafür haben wir uns das Package laravel-json-api [3] zunutze gemacht. Das Modul hilft uns, anhand eines fixen Sets aus Konfigurationen zu bestimmen, wie das API strukturiert werden soll. Jeder E...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang