Formation PUB030 : Laravel, 2019 Les relations avec Eloquent ORM

22.1 Définir les relations dans le modèle


Dans sa forme la plus simple, le modèle permet de faire le lien entre une classe et une table dont le nom est celui de la classe suivi avec un s terminal. Ceci fonctionne même si la classe est complètement vide.

Évidemment, il est possible d'aller beaucoup plus loin avec le modèle. On pourra notamment y coder les relations entre les tables, ce qui simplifiera grandement les requêtes.

On utilisera à cette fin les méthodes hasMany(), belongsTo(), belongsToMany(), hasOne(), hasManyThrough(), etc.

Par exemple, dans une table factures qui contient des items dans une relation de plusieurs à plusieurs, il est possible d'effectuer une grosse requête pour retrouver la liste des items d'une facture :

Contrôleur Laravel (PHP)

$facture = Facture::find($id);

 

$items = Item::join('facture_item', 'item_id', '=', 'items.id')

    ->join('factures', 'facture_id', '=', 'factures.id')

    ->where('factures.id', $facture->id)

    ->select('items.*')

    ->get();

On aurait aussi pu travailler directement avec une requête SQL pour obtenir les mêmes informations, mais stockées dans un tableau plutôt que dans une collection :

Contrôleur Laravel (PHP)

$facture = Facture::find($id);

$items = DB::select('SELECT * FROM items INNER JOIN facture_item ON facture_item.item_id=items.id WHERE facture_item.facture_id = ?', [$facture->id]);

Vous conviendrez cependant qu'il est beaucoup plus simple de retrouver la liste des items d'une facture comme suit :

Contrôleur Laravel (PHP)

$facture = Facture::find($id);

$items = $facture->items;

Mais pour pouvoir tirer avantage de cette fonctionnalité, il faut d'abord modifier le fichier modèle de la facture afin d'y définir la relation entre une facture et un item.

Pour plus d'information

« Eloquent: Relationships ». Laravel. https://laravel.com/docs/master/eloquent-relationships

« Eloquent Relationships: The Ultimate Guide ». Quick Admin Panel. https://quickadminpanel.com/blog/eloquent-relationships-the-ultimate-guide/

« Illuminate\Database\Eloquent\Relations ». Laravel API. http://v4.golaravel.com/api/4.2/Illuminate/Database/Eloquent/Relations.html

« Eloquent: Relationships ». laravel-doc. http://laravel-doc.readthedocs.io/en/stable/eloquent-relationships/

« Laravel Relationships CheatSheet ». Laravel Tips'n Tricks. http://laraveltnt.com/laravel-relationships-cheatsheet/

« Eloquent Relationships Cheat Sheet ». Medium. https://medium.com/@Mahmoud_Zalt/eloquent-relationships-cheat-sheet-5155498c209

▼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