web-dev-qa-db-fra.com

Récupération des relations de relations à l'aide d'Eloquent dans Laravel

J'ai une base de données avec les tables et relations suivantes:

Publicité 1-1 Voiture m-1 Modèle m-1 Marque

Si je veux récupérer une annonce, je peux simplement utiliser:

Advert::find(1);

Si je veux les détails de la voiture, je pourrais utiliser:

Advert::find(1)->with('Car');

Cependant, si je veux aussi le détail du modèle (après la relation avec Car), quelle serait la syntaxe, ce qui suit ne fonctionne pas:

Advert::find(1)->with('Car')->with('Model');

Merci beaucoup

23
Ben Thompson

C'est dans l'officiel documentation sous "Eager Loading"

Relations multiples:

$books = Book::with('author', 'publisher')->get();

Relations imbriquées:

$books = Book::with('author.contacts')->get();

Alors pour vous:

Advert::find(1)->with('Car.Model')->get();
71
Björn

Vous devez d'abord créer vos relations,

<?php

class Advert extends Eloquent {

    public function car()
    {
        return $this->belongsTo('Car');
    }

}

class Car extends Eloquent {

    public function model()
    {
        return $this->belongsTo('Model');
    }

}

class Model extends Eloquent {

    public function brand()
    {
        return $this->belongsTo('Brand');
    }

    public function cars()
    {
        return $this->hasMany('Car');
    }

}

class Brand extends Eloquent {

    public function models()
    {
        return $this->hasMany('Model');
    }

}

Ensuite, il vous suffit d'accéder de cette façon:

echo Advert::find(1)->car->model->brand->name;

Mais vos champs de table devraient l'être, car Laravel devinez-les de cette façon:

id (for all tables)
car_id
model_id
brand_id

Ou vous devrez les spécifier dans la relation.

4