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
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();
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.