Formation PUB030 : Laravel, 2019 Accéder aux données d'une relation

23.3 Accéder aux champs d'une table pivot


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.

Schéma belongsToMany()

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.

Modèle Laravel (PHP)

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 :

Contrôleur Laravel (PHP)

$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 :

Vue Laravel (Blade)

@foreach($facture->produits as $produit)

    ...

    Quantité : {{ $produit->pivot->quantite }}

    ...

@endforeach

Pour plus d'information

« 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é

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre