Les problèmes des relations imbriquées de Laravel : résoudre la récupération de données complexes
Dans Laravel, combler les relations complexes entre les tables de base de données peut souvent s'avérer difficile. Considérez le scénario dans lequel vous souhaitez récupérer les participants à un événement par son identifiant. Cependant, cette tâche est compliquée par la présence de tables intermédiaires au sein de la chaîne de relation événement-personne.
Pour répondre à cette problématique, il est impératif de définir minutieusement les relations entre vos modèles. Vous trouverez ci-dessous les relations de modèle pertinentes :
Modèle d'événement :
class Event extends Eloquent { public function city() { return $this->belongsTo('City'); } }
Modèle de ville :
class City extends Eloquent { public function companies() { return $this->hasMany('Company'); } }
Modèle d'entreprise :
class Company extends Eloquent { public function persons() { return $this->hasMany('Person'); } }
Personne Modèle :
class Person extends Eloquent { public function eventscore() { return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')->withPivot('score')->withTimestamps(); } }
Après avoir défini ces relations, explorons deux tentatives infructueuses pour résoudre le problème :
return Event::with('city')->with('company')->get();
return Event::with('city')->whereHas('companies', function($query) use ($company_id){ $query->where('company_id', $company_id); })->get();
La solution ultime réside dans l'utilisation du chargement impatient d'éloquent capacités :
return Event::with('city.companies.persons')->get();
Cette requête récupère l'événement ainsi que sa ville associée, ses entreprises et les personnes associées à celles-ci. entreprises.
Alternativement, si seuls des champs spécifiques de la table des personnes sont requis :
return Event::with(['city.companies.persons' => function ($query) { $query->select('id', '...'); }])->get();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!