2016-03-17 15 views
6

Lassen Sie uns sagen, dass ich diese Beziehungen haben hierMehrere Ebenen eifrig laden in Laravel?

class Invitation 
{ 
    public function invitedPeople() 
    { 
     return $this->belongsTo('App\Person', 'personID'); 
    } 
} 

class Person 
{ 
    public function apartments() 
    { 
     return $this->belongsToMany('App\Apartment', 'apartment_person', 'personID', 'apartmentID');   
    } 
} 

class Apartment 
{ 
    public function city() 
    { 
     return $this->belongsTo('App\City', 'cityID'); 
    } 
} 

Meine Frage ist, wie viele verschachtelte Ebenen können wir haben, wenn Laravel eifrig Laden mit? Ich habe diese Abfrage versucht und es funktioniert nicht, kann jemand vorschlagen, eine Arbeit für diese?

return Invitation::with(['invitedPeople', 'invitedPeople.apartments', 'invitedPeople.apartments.city']) 
+0

Sie können so viele Ebenen verschachteln, wie Sie möchten. Definieren Sie "nicht funktioniert", wie das sollte gut funktionieren. Das einzige, was ich sehe, ist, dass du '-> get()' nicht am Ende aufgerufen hast. – patricus

+0

Es gibt keine Begrenzung, aber Sie können dies optimieren, indem Sie 'Invitation :: with (['ludedPeople.apartments.city']]' 'ausführen. – user3158900

+0

@ user3158900 Einladung :: mit ('ludedPeople.apartments.city']) würde drei Joins einschließlich eingeladenePersonen, Wohnungen und Stadt tun? – ggderas

Antwort

7

ändern es zu

return Invitation::with('invitedPeople.apartments.city')->get() 

Es wird eifrig Last alle zugehörigen Daten für Sie. Sie haben die Funktion get() verpasst. Sie können so tief wie möglich nisten.