Wat is een custom pivot-model?
De tussentabel van belongsToMany (veel-op-veel) wordt standaard behandeld als een kaleIlluminate\Database\Eloquent\Relations\Pivot-instantie. Wil je extra kolommen op de tussentabel bijhouden (goedkeuringsdatum, roltype, enzovoort) of accessors, mutators of eigen methoden toevoegen, maak dan een custom model dat overerft van Pivot.
belongsToMany-definitie de methode using() aan om de relatie te vertellen dat dit custom model gebruikt moet worden.
Noem custom pivot-modellen altijd volgens de conventie alfabetisch gesorteerd en in het enkelvoud (
RoleUser, niet UserRole). Dit is echter alleen een naamgevingsconventie; technisch mag je elke klassenaam gebruiken.Attributen kiezen met as()
Standaard benader je waarden uit de tussentabel via de property pivot. Met de methode as() kun je deze naam wijzigen.
Extra kolommen en timestamps
Als je tussentabel extra kolommen zoalsapproved heeft, geef je die expliciet aan met withPivot(). Wil je created_at / updated_at beheren, gebruik dan withTimestamps().
Terugverwijzen vanuit het pivot-model
Op een custom pivot-model kun je vrijelijkbelongsTo-relaties definiëren naar het bronmodel en het gerelateerde model.
$roleUser->role of $roleUser->user bij de gerelateerde modellen komen. Wil je deze relaties automatisch eager laden wanneer de parent-query wordt uitgevoerd, dan biedt de hieronder beschreven chaperone() een oplossing.
Automatische eager loading met chaperone() (Laravel 13)
Laravel 13 heeft de methode chaperone() toegevoegd. Daarmee kun je belongsTo-relaties zoals role() / user() die op het pivot-model zijn gedefinieerd, automatisch laten hydraten (het equivalent van eager loading) wanneer een belongsToMany-query wordt uitgevoerd.
chaperone() aanroept, leidt Eloquent automatisch de namen af van de belongsTo-relaties op het pivot-model (RoleUser). Bij het ophalen van een collectie zoals Role::with('users') stelt het de verwijzingen naar het bronmodel en het gerelateerde model in op elke pivot, zonder extra queries uit te voeren.
Niet-standaard relatienamen gebruiken
Wijken de methodenamen van debelongsTo-relaties op je pivot-model af van de standaardconventie (camelCase enkelvoud van het bron- en gerelateerde model), geef ze dan expliciet mee als argumenten van chaperone().
Volgende stappen
Relaties
Ga terug naar de basisdefinities van relaties, inclusief belongsToMany, om te herhalen.
Eloquent Observers en model events
Leer hoe je met model events het opslaan en bijwerken van pivot-modellen kunt hooken.