2016-08-03 3 views
1

Ich habe eine ziemlich komplexe Struktur, die mehrere Beziehungen enthält. Wenn meine Beziehungen auf diese Weise definiert sind, wie kann ich alle in einem Anruf laden?Laden Sie alle Beziehungen und ihre Kinder in Laravel

Model 
    (has many) ChildModels1 
     Child1a 
     Child1b 
     ... 
    (has many) ChildModels2 
     Child2a 
     Child2b 
     ... 
    (has many) ChildModels3 
     Child3a 
     Child3a 
      Child3aa 
      Child3ab 
      ... 

Ich bin in der Lage, Folgendes zu tun:

$entity = Entity::find($id)->load('ChildModels1', 'ChildModels2', 'ChildModels3'); 

Aber ich bin nicht sicher, wie auch alle Kind-Beziehungen zu laden.

Antwort

2

Dies kann mit Eager Loading erreicht werden:

Entity::where('id', $id)->with('relation1.subrelation1', 'relation1.subrelation2', 'relation2.subrelation1', 'relation2.subrelation2')->get(); 

Wenn Eloquent Beziehungen als den Zugriff auf Eigenschaften, ist die Beziehung Daten "lazy geladen". Dies bedeutet, dass die Beziehungsdaten nicht tatsächlich geladen sind, bis Sie zuerst auf die Eigenschaft zugreifen. Eloquent kann jedoch zu dem Zeitpunkt, an dem Sie das übergeordnete Modell abfragen, Beziehungen "begierig laden". Eager loading erleichtert das N + 1-Abfrageproblem.

Sie können mehr darüber in der Laravel documentation on eager loading lesen.

+0

Danke, das macht den Trick; Es scheint jedoch nicht, diese $ ID-Variable zu respektieren. Es findet alles. – farjam

+0

Ich habe meine Antwort bearbeitet –

Verwandte Themen