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 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.
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.
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.
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.
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!