Was ist ein eigenes Pivot-Modell?
Die Zwischentabelle einer belongsToMany-Relation (n:m) wird standardmäßig als reineIlluminate\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.
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 wieapproved, müssen Sie sie mit withPivot() explizit in den Abruf einbeziehen. Möchten Sie created_at / updated_at verwalten, rufen Sie withTimestamps() auf.
Rückverweise vom Pivot-Modell aus
Auf einem eigenen Pivot-Modell können Sie beliebigebelongsTo-Relationen zum deklarierenden und zum verknüpften Modell definieren.
$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.
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 derbelongsTo-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.
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.