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 ?

Comment gérer les relations imbriquées dans Laravel : récupérer les personnes associées à un événement ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-27 20:13:14625parcourir

How to Handle Nested Relationships in Laravel: Retrieving Persons Associated with an Event?

Relations imbriquées Laravel : décomposer les requêtes de base de données complexes

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.

Comprendre le schéma de la base de données

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.

Requête de relation imbriquée

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.

Solution

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.

Sélection des champs

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.

Éviter le chargement rapide

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn