2016-03-17 24 views
6

Diciamo che ho questi rapportiCaricamento livellatore multiplo 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'); 
    } 
} 

La mia domanda è, quanti livelli nidificati che possiamo avere quando si utilizza laravel eager loading? Ho provato questa query e non funziona, qualcuno può suggerire un lavoro per questo?

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

È possibile nidificare tutti i livelli desiderati. Definire "non funziona", in quanto dovrebbe funzionare correttamente. L'unica cosa che vedo è che non hai chiamato '-> get()' alla fine. – patricus

+0

Non c'è un limite, ma puoi ottimizzarlo facendo 'Invitation :: with (['invitePeople.apartments.city'])'. – user3158900

+0

@ user3158900 Invitation :: with ('invitePeople.apartments.city')) farebbe tre join tra cui invitatiPersone, appartamenti e città? – ggderas

risposta

7

cambiare a

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

caricherà desiderosi tutti i dati correlati per voi. Hai perso la funzione get(). Puoi nidificare il più profondo possibile.