Accéder à une relation distante via une relation intermédiaire - Laravel Eloquent - Méthode hasManyThrough()

Aujourd'hui, nous allons voir comment accéder à une relation distante via une autre relation. Dans un projet, j'ai ce schéma de table : travels - reservations - travellers


Les 3 modèles liés sont Travel (les voyages) ; Reservation (les réservations du voyage) ; Traveller (les voyageurs)


Maintenant, je dois dans un voyage avoir la liste des voyageurs. On pourrait se dire qu'on va faire une requête sur travel, puis lire toutes les réservations et ainsi en déduire les voyageurs.


Mais Laravel nous simplifie la tâche grâce à la méthode hasManyThrough(). Voici comment faire :


<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Travel extends Model
{
    public function travellers()
    {
        return $this->hasManyThrough(Traveller::class, Reservation::class);
    }
}


Cours rédigé par Vincent, publié le 09/04/2021