Maison > base de données > tutoriel mysql > Comment puis-je récupérer efficacement les participants à un événement avec des relations imbriquées dans Laravel ?

Comment puis-je récupérer efficacement les participants à un événement avec des relations imbriquées dans Laravel ?

Mary-Kate Olsen
Libérer: 2024-11-13 17:27:02
original
790 Les gens l'ont consulté

How Can I Efficiently Retrieve Attendees for an Event with Nested Relationships in Laravel?

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');
    }
}
Copier après la connexion

Modèle de ville :

class City extends Eloquent
{
    public function companies()
    {
        return $this->hasMany('Company');
    }
}
Copier après la connexion

Modèle d'entreprise :

class Company extends Eloquent
{
    public function persons()
    {
        return $this->hasMany('Person');
    }
}
Copier après la connexion

Personne Modèle :

class Person extends Eloquent
{
    public function eventscore()
    {
        return $this->belongsToMany('Event', 'event_scores', 'person_id', 'event_id')->withPivot('score')->withTimestamps();
    }
}
Copier après la connexion

Après avoir défini ces relations, explorons deux tentatives infructueuses pour résoudre le problème :

return Event::with('city')->with('company')->get();
Copier après la connexion
return Event::with('city')->whereHas('companies', function($query) use ($company_id){
        $query->where('company_id', $company_id);
    })->get();
Copier après la connexion

La solution ultime réside dans l'utilisation du chargement impatient d'éloquent capacités :

return Event::with('city.companies.persons')->get();
Copier après la connexion

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();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal