Maison >base de données >tutoriel mysql >Comment gérer les relations imbriquées dans Laravel : récupérer les personnes associées à un événement ?
Dans Laravel, naviguer dans les relations complexes entre plusieurs tables de base de données peut être une tâche ardue. Cette question illustre un tel défi : récupérer les personnes associées à un événement lorsqu'il existe plusieurs tables intermédiaires.
Le schéma de la base de données se compose de quatre tables : événements , villes, entreprises, et personnes. Le modèle Événement a une relation plusieurs-à-un avec la Ville, et Ville a une relation un-à-plusieurs avec les deux Entreprise et Événement. Entreprise a une relation un-à-plusieurs avec Personne.
L'utilisateur a besoin d'une requête qui récupère personnes abonné à un événement par identifiant. Pour y parvenir, nous devons naviguer à travers les relations entre la ville et l'entreprise.
La solution simple consiste à utiliser la méthode with pour charger avec impatience les relations imbriquées :
return Event::with('city.companies.persons')->get();
Cette requête récupère tous les événements, ainsi que leurs villes associées, entreprises et personnes.
Si vous n'avez besoin que de champs spécifiques de la table personnes, tels que ID et prénom, utilisez une fermeture pour modifier la requête :
return Event::with(['city.companies.persons' => function ($query) { $query->select('id', 'firstname'); }])->get();
Cette requête modifiée récupère personnes avec uniquement les champs spécifiés.
Si le chargement rapide n'est pas souhaité, vous pouvez utiliser la méthode WhereHas pour contraindre la requête en fonction de l'existence de modèles associés :
return Event::whereHas('city.companies.persons', function ($query) { $query->where('company_id', $company_id); })->get();
Cette requête récupère les événements qui ont au moins un personne associée à une entreprise spécifique.
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!