Tutorial · Laravel · 23.05.2024

Meistere die Morph Maps: Schritt-für-Schritt-Anleitung

Mit der neuen Morph Maps-Funktion kannst du die nächste Stufe der Datenmodellierung in Laravel 11 erleben. Diese Anleitung zeigt dir, wie du Morph Maps effektiv...

Schritt 1: Installiere Laravel 11

Stelle sicher, dass du Laravel 11 installiert hast. Verwende den folgenden Befehl, um ein neues Laravel 11-Projekt zu erstellen
shell
composer create-project --prefer-dist laravel/laravel blog

Tipp

Stelle sicher, dass du die neueste Version von Composer installiert hast, um Kompatibilitätsprobleme zu vermeiden. Falls nötig, aktualisiere Composer mit

composer self-update

Schritt 2: Einrichten der Datenbank

Konfiguriere deine .env-Datei, um die Datenbankverbindung einzurichten:
php
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=blog
DB_USERNAME=root
DB_PASSWORD=
Führe die Migrationen aus, um die Standardtabellen zu erstellen:
shell
php artisan migrate

Tipp

Verwende den Befehl php artisan migrate:status, um den Status deiner Migrationen zu überprüfen und sicherzustellen, dass alles korrekt eingerichtet ist.

Schritt 3: Erstellen der Modelle und Migrationen

Erstelle die Modelle und Migrationen für die polymorphe Beziehung. Angenommen, wir haben eine Post- und eine Video-Tabelle, die beide kommentiert werden können.
shell
php artisan make:model Post -m
php artisan make:model Video -m
php artisan make:model Comment -m
Füge in den Migrationen eine Indexierung hinzu, um die Abfragegeschwindigkeit zu verbessern. Beispielsweise:
php
$table->index('commentable_type');
$table->index('commentable_id');

Schritt 4: Definiere die Beziehungen in den Modellen

Füge die polymorphen Beziehungen in den entsprechenden Modellen hinzu. app/Models/Post.php
php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphMany;

class Post extends Model
{
    public function comments(): MorphMany
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

Tipp

Verwende die Methoden with() und load() beim Abrufen von Modellen, um Eager Loading zu nutzen und die Anzahl der Datenbankabfragen zu minimieren.

Schritt 5: Konfigurieren der Morph Maps

Verwende die Morph Maps-Funktion, um benutzerdefinierte Morph-Typen zu definieren. Dies kann in einer Service-Provider-Datei, wie AppServiceProvider, erfolgen. app/Providers/AppServiceProvider.php
php
use Illuminate\Database\Eloquent\Relations\Relation;

public function boot()
{
    Relation::morphMap([
        'post' => 'App\Models\Post',
        'video' => 'App\Models\Video',
    ]);
}

Tipp

Das Hinzufügen von Morph Maps hilft, deine Datenbankabfragen lesbarer und verständlicher zu machen, da anstelle von Klassennamen kurze, lesbare Typen verwendet werden.

Schritt 6: Daten einfügen und testen

Füge Daten in deine Post-, Video- und Comment-Tabellen ein, um die polymorphen Beziehungen zu testen. Beispiel-Daten hinzufügen:
php
use App\Models\Post;
use App\Models\Video;
use App\Models\Comment;

$post = Post::create(['title' => 'My First Post', 'body' => 'This is the body of my first post.']);
$video = Video::create(['title' => 'My First Video', 'url' => 'http://example.com/video']);

$comment1 = new Comment(['body' => 'Great post!']);
$comment2 = new Comment(['body' => 'Nice video!']);

$post->comments()->save($comment1);
$video->comments()->save($comment2);

Tipp

Verwende Tinker (php artisan tinker), um interaktiv mit deinem Eloquent-Modell zu arbeiten und Daten zu testen, bevor du sie in deine Anwendung integrierst. Dies erleichtert das Debugging und das Verstehen der Beziehungen.

Schritt 7: Überprüfe die Beziehung

Überprüfe die Beziehung
php
$post = Post::with('comments')->find(1);
$video = Video::with('comments')->find(1);

dd($post->comments, $video->comments);

Tipp

Nutze die Laravel Debugbar oder ein ähnliches Paket, um detaillierte Informationen über deine Datenbankabfragen und Beziehungen zu erhalten. Dies kann bei der Optimierung und Fehlersuche sehr hilfreich sein.

Info

Mit dieser Schritt-für-Schritt-Anleitung und zusätzlichen Tipps kannst du die Morph Maps-Funktion in Laravel 11 erfolgreich einsetzen. Die Verwaltung polymorpher Beziehungen wird durch die Verwendung von benutzerdefinierten Morph-Typen erleichtert. Herzlichen Erfolg bei der Umsetzung!

Quelle: https://birdapi.de/blog/tutorials-laravel/meistere-die-morph-maps-schritt-fur-schritt-anleitung