Généralement, les informations stockées dans la table pivot seront lues en passant par une des tables principales de la relation.
Prenons l'exemple d'une relation belongsToMany() entre les tables factures et produits.
Par défaut, dans une relation belongsToMany(), seuls les champs de la seconde table principale seront disponibles. Pourtant, il serait intéressant de pouvoir accéder aux champs quantite et prixunitaire de la table pivot.
Eloquent nous permet d'y arriver, il faudra ajouter une clause withPivot() à la relation.
class Facture extends Model
{
...
/**
* Une facture peut contenir plusieurs produits.
*
* @return IlluminateDatabaseEloquentRelationsBelongsToMany
*/
public function produits()
{
return $this->belongsToMany('AppProduit')->withPivot('quantite', 'prixunitaire');
}
...
}
Prenons l'exemple d'un contrôleur qui appelle une vue pour afficher les détails d'une facture :
$facture = Facture::find($id)->get();
return View('factures.show', compact('facture'));
Grâce à la mention withPivot() dans la définition de la relation, il sera possible d'accéder aux informations de la table intermédiaire comme suit :
@foreach($facture->produits as $produit)
...
Quantité : {{ $produit->pivot->quantite }}
...
@endforeach
« Advanced Eloquent: Working with Pivot Tables ». stefanzweifel. https://stefanzweifel.io/posts/advanced-eloquent-working-with-pivot-tables
« Laravel Eloquent: Eager Load Pivot Relations ». Medium. https://medium.com/@ajcastro29/laravel-eloquent-eager-load-pivot-relations-dba579f3fd3a
▼Publicité