Skip to main content

Was ist ein eigenes Pivot-Modell?

Die Zwischentabelle einer belongsToMany-Relation (n:m) wird standardmäßig als reine Illuminate\Database\Eloquent\Relations\Pivot-Instanz behandelt. Möchten Sie in der Zwischentabelle zusätzliche Spalten (z. B. ein Freigabedatum oder eine Rollenart) führen oder Accessors, Mutators und eigene Methoden ergänzen, erstellen Sie ein eigenes Modell, das von Pivot erbt.
In der Definition von belongsToMany rufen Sie anschließend using() auf, um der Relation dieses eigene Modell mitzuteilen.
Achten Sie beim Speichern eines eigenen Pivot-Modells darauf, den Modellnamen stets als alphabetisch sortierte Singularform zu wählen (RoleUser statt UserRole). Das ist jedoch nur eine Namenskonvention – der tatsächliche Klassenname bleibt Ihnen überlassen.

Mit as() einen anderen Zugriffsnamen wählen

Standardmäßig greifen Sie über die Eigenschaft pivot auf die Werte der Zwischentabelle zu. Mit der Methode as() können Sie diesen Namen ändern.

Zusätzliche Spalten und Timestamps

Enthält die Zwischentabelle zusätzliche Spalten wie approved, müssen Sie sie mit withPivot() explizit in den Abruf einbeziehen. Möchten Sie created_at / updated_at verwalten, rufen Sie withTimestamps() auf.
Eloquent aktualisiert das updated_at der Zwischentabelle nur dann automatisch, wenn das entsprechende Pivot-Modell über using() explizit angegeben ist. withTimestamps() funktioniert zwar auch mit der Standardklasse Pivot, doch erst mit einem über using() angegebenen eigenen Modell stehen Ihnen zusätzliche Möglichkeiten wie eigene Events oder eigene Casts zur Verfügung.

Rückverweise vom Pivot-Modell aus

Auf einem eigenen Pivot-Modell können Sie beliebige belongsTo-Relationen zum deklarierenden und zum verknüpften Modell definieren.
Dadurch können Sie – selbst wenn Sie nur das Pivot-Modell allein abrufen – über $roleUser->role oder $roleUser->user auf die verknüpften Modelle zugreifen. Möchten Sie diese Relationen jedoch bereits beim Ausführen der übergeordneten Abfrage automatisch per Eager Loading laden, hilft die im Folgenden vorgestellte Methode chaperone().

Automatisches Eager Loading mit chaperone() (Laravel 13)

Mit Laravel 13 wurde die Methode chaperone() eingeführt. Sie hydratisiert die auf dem Pivot-Modell definierten belongsTo-Relationen wie role() / user() automatisch (vergleichbar mit Eager Loading), wenn die belongsToMany-Abfrage ausgeführt wird.
Wird chaperone() aufgerufen, ermittelt Eloquent automatisch die Namen der belongsTo-Relationen des Pivot-Modells (RoleUser) und setzt beim Laden einer Collection wie Role::with('users') für jeden Pivot ohne zusätzliche Abfragen die Verweise auf das deklarierende und das verknüpfte Modell.

Nicht-standardmäßige Relationsnamen verwenden

Weichen die Methodennamen der belongsTo-Relationen des Pivot-Modells von der Standardkonvention ab (CamelCase-Singularform des deklarierenden bzw. verknüpften Modellnamens), können Sie sie über die Argumente von chaperone() explizit angeben.
chaperone() löst das „N+1-Problem” auch für Verweise über die Zwischentabelle. In Anwendungen, die häufig Informationen aus dem Elternmodell über den Pivot referenzieren (z. B. Freigabedatum und Benutzername gemeinsam anzeigen), lohnt sich der Einsatz in Kombination mit dem gewöhnlichen Eager Loading via with().

Nächste Schritte

Eloquent-Beziehungen

Wiederholen Sie die Definition grundlegender Relationen, einschließlich belongsToMany.

Eloquent-Observer und Model-Events

Erfahren Sie, wie Sie mit Model-Events das Speichern und Aktualisieren eines Pivot-Modells hooken.
Zuletzt geändert am 11. September 2026