Qu’est-ce qu’un modèle pivot personnalisé
Par défaut, la table intermédiaire d’un belongsToMany (relation plusieurs-à-plusieurs) est représentée par une instance brute deIlluminate\Database\Eloquent\Relations\Pivot. Si vous souhaitez ajouter des colonnes supplémentaires à la table intermédiaire (date d’approbation, type de rôle, etc.), ou définir des accesseurs, mutateurs ou méthodes personnalisées, vous pouvez créer un modèle personnalisé qui hérite de Pivot.
belongsToMany, appelez using() pour indiquer à la relation qu’elle doit utiliser ce modèle personnalisé.
Lorsque vous nommez un modèle pivot personnalisé, il est de convention de le nommer avec les noms des deux modèles au singulier, dans l’ordre alphabétique (
RoleUser et non UserRole). Il s’agit cependant d’une simple convention : le nom de classe réel peut être choisi librement.Choisir les attributs à récupérer avec as()
Par défaut, les valeurs de la table intermédiaire sont accessibles via la propriété pivot. La méthode as() permet de renommer cette propriété.
Colonnes supplémentaires et timestamps
Si la table intermédiaire comporte des colonnes supplémentaires commeapproved, vous devez les inclure explicitement dans le résultat avec withPivot(). Pour gérer created_at / updated_at, appelez withTimestamps().
Références inverses depuis le modèle pivot
Vous pouvez librement définir des relationsbelongsTo sur le modèle pivot personnalisé pour remonter vers le modèle déclarant et le modèle lié.
$roleUser->role ou $roleUser->user. Si vous souhaitez que ces relations soient automatiquement eager-loadées lors de l’exécution de la requête parente, la méthode chaperone() présentée ci-dessous est faite pour cela.
Eager loading automatique avec chaperone() (Laravel 13)
Laravel 13 introduit la méthode chaperone(), qui permet d’hydrater automatiquement (l’équivalent d’un eager loading) les relations belongsTo comme role() / user() définies sur le modèle pivot, lorsque la requête belongsToMany s’exécute.
chaperone(), Eloquent déduit automatiquement le nom des relations belongsTo définies sur le modèle pivot (RoleUser). Ainsi, lorsque vous récupérez une collection via Role::with('users'), il rattache aux pivots les références vers le modèle déclarant et le modèle lié sans requête supplémentaire.
Utiliser des noms de relations non standards
Si les méthodesbelongsTo du modèle pivot ne suivent pas la convention de nommage standard (nom du modèle en camelCase singulier), vous pouvez les spécifier explicitement via les arguments de chaperone().
Étapes suivantes
Relations Eloquent
Revenez sur la définition des relations de base, dont belongsToMany.
Observers Eloquent et événements de modèle
Apprenez à utiliser les événements de modèle pour intercepter la sauvegarde et la mise à jour d’un modèle pivot.