2017-11-30 6 views
0

So habe ich drei Modelle:Chaining Modelle zusammen Laravel Eloquent

Challenge-

Benutzer

Entrant

Herausforderung hat gerade ihren Primärschlüssel

Benutzer nur hat seinen Primärschlüssel

und Teilnehmer hat einen Fremdschlüssel s challenge_id und user_id

Wenn ich von der Abfrage abfrage (ich habe die Challenge-ID), was ist der beste Weg, um eloquent alle Benutzer mit dieser Herausforderung verbunden zu bekommen? Ich möchte im Wesentlichen, dass eine Zusammenfassung aller Teilnehmerdaten mit allen Benutzerdaten kombiniert wird. Ich habe in die Methode hasManyThrough (https://laravel.com/docs/5.5/eloquent-relationships) untersucht, aber ich kann nicht scheinen, es zur Arbeit zu bringen.

+2

tatsächlich würde Dies ist Tabelle Pivot eine 'belongsToMany' wo' entrant' seiner eingerichtet hat. – user3158900

Antwort

0

Der Code, den Sie suchen ist:

Entrant::where('challenge_id', $challengeId)->with('users')->get(); 

Der Schlüssel zu diesem Stück Code ist der with Teil, der die Benutzer eagerly loads, die mit jedem Teilnehmer zugeordnet sind. Diese Methode zum Laden verwandter Daten löst das N + 1-Problem und führt zu einer geringeren Belastung der Datenbank.

Dieser Code wird vorausgesetzt, dass die entsprechenden Beziehungen zwischen jedem Ihrer eloquent Modellen ...

User  hasMany Entrant 
Challenge hasMany Entrant 
Entrant belongsTo User 
Entrant belongsTo Challenge 
+0

Das ist großartig, danke für die kleine zusätzliche Erklärung, gehe zur eifrigen Ladung, wann immer ich kann. –