Heim >Datenbank >MySQL-Tutorial >Wie gehe ich mit verschachtelten Beziehungen in Laravel um: Mit einem Ereignis verknüpfte Personen abrufen?

Wie gehe ich mit verschachtelten Beziehungen in Laravel um: Mit einem Ereignis verknüpfte Personen abrufen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 20:13:14596Durchsuche

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

Verschachtelte Laravel-Beziehungen: Komplexe Datenbankabfragen aufschlüsseln

In Laravel kann das Navigieren in komplexen Beziehungen zwischen mehreren Datenbanktabellen eine entmutigende Aufgabe sein. Diese Frage veranschaulicht eine solche Herausforderung: das Abrufen von Personen, die mit einem Ereignis verknüpft sind, wenn mehrere Zwischentabellen vorhanden sind.

Das Datenbankschema verstehen

Das Datenbankschema besteht aus vier Tabellen: Ereignisse , Städte, Unternehmen und Personen. Das Ereignis-Modell hat eine Viele-zu-Eins-Beziehung mit Stadt, und Stadt hat eine Eins-zu-Viele-Beziehung mit beiden Unternehmen und Ereignis. Unternehmen hat eine Eins-zu-viele-Beziehung mit Person.

Verschachtelte Beziehungsabfrage

Der Benutzer benötigt eine Abfrage, die Personen abruft hat eine Veranstaltung per ID abonniert. Um dies zu erreichen, müssen wir durch die Stadt- und Unternehmensbeziehungen navigieren.

Lösung

Die einfache Lösung besteht darin, die with-Methode zu verwenden, um die verschachtelten Beziehungen eifrig zu laden:

return Event::with('city.companies.persons')->get();

Diese Abfrage ruft alle Ereignisse zusammen mit den zugehörigen Städten ab. Firmen und Personen.

Feldauswahl

Wenn Sie nur bestimmte Felder aus der Tabelle Personen benötigen, wie z ID und Vorname, verwenden Sie einen Abschluss, um die Abfrage zu ändern:

return Event::with(['city.companies.persons' => function ($query) {
    $query->select('id', 'firstname');
}])->get();

Diese geänderte Abfrage ruft ab Personen mit nur den angegebenen Feldern.

Eager Loading vermeiden

Wenn Eager Loading nicht erwünscht ist, können Sie die Methode whereHas verwenden, um die Abfrage basierend auf der Existenz von einzuschränken Verwandte Modelle:

return Event::whereHas('city.companies.persons', function ($query) {
    $query->where('company_id', $company_id);
})->get();

Diese Abfrage ruft Ereignisse ab, die mindestens haben eine Person, die mit einem bestimmten Unternehmen verbunden ist.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit verschachtelten Beziehungen in Laravel um: Mit einem Ereignis verknüpfte Personen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn