Kontakt aufnehmen

Laravel Pivot Tabellen

Pivot Tabellen in Laravel bezeichnen die Relationstabellen, die bei many-to-many (viele-zu-viele) Relationen benötigt werden.

Angenommen wir hätten eine Kommentarfunktion implementiert, bei der User Kommentare mit Tags versehen können. Jeder Kommentar kann beliebig viele Tags erhalten und jedes Tag kann für beliebig viele Kommetare verwendet werden – eine klassische many-to-many Relation.
Neben den beiden Tabellen „comments“ und „tags“ gibt es also noch die Pivot-Tabelle „comment_tag“, die von beiden Tabellen jeweils den Primärschlüssel enthält.

Um über ein Comment-Objekt auf seine zugehörigen Tag-Objekte zuzugreifen, muss die Relation erst einmal in der Comment-Klasse definiert werden:

public function tags() {
    return $this->belongsToMany('App\Tag');
}

Wenn wir zum Beispiel alle Tags für einen Kommentar abrufen möchten, können wir das mit $comment->tags() tun. In diesem Fall muss man die Pivot-Tabelle selbst nicht anfragen. Das erledigt Eloquent im Hintergrund und liefert uns dann eine Sammlung der zugehörigen Tag-Objekte.

Achtung: Die Namenskovention von Eloquent geht davon aus, dass die Pivot-Tabelle in diesem Fall „comment_tag“ heißt und die beiden Primärschlüssel „comment_id“ und „tag_id“ heißen. Wenn das nicht der Fall ist, muss die belongsToMany Funktion mit weiteren Parametern aufgerufen werden:

return $this->belongsToMany('App\Tag', 'comment_pivot_tag', 'comment_key', 'tag_key');

Normalerweise werden Pivot-Tabellen nur für die Zuordnung von jeweils zwei Objekten benötigt, deren Attribute man verwenden möchte. Man kann aber auch direkt auf Attribute aus der Pivot-Tabelle selbst zugreifen:

foreach ($comment->tags as $tag) {
    $tag->pivot->created_at;
}

Das Verknüpfen von Objekten in der Pivot-Tabelle erfolgt über die attach Funktion:

$comment->tags()->attach($tagId);

Das Lösen einer Verknüpfung geht über:

$comment->tags()->detach($tagId);

Die sync-Funktion macht dasselbe wie attach, überprüft aber vor dem Speichern ob die Verknüpfung bereits existiert.

$comment->tags()->sync($tag);

Laravel Entwickler gesucht?

Wir haben bereits viel Erfahrung im Umgang mit Laravel und Vue.js.
Nehmen Sie gerne unverbindlich Kontakt zu uns auf.

zum Angebot

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern