2016-06-13 32 views
5

Ich gehe durch die Laravel Dokumentation habe, habe ich nicht den Unterschied zwischen Mit oder laden in Abfragen erhalten, in welchem ​​Zustand müssen wir verwenden Mit oder laden? Bitte beschreiben Sie es., was der Unterschied zwischen „mit“ und „load“ in Laravel ist

Model::find(1)->with('firstModel','SecondModel'); 

Model::find(1)->load('firstModel','SecondModel'); 
+0

Ihre Frage hat in der Post http://stackoverflow.com/questions/26005994/laravel-with-method-versus-load-method beantwortet –

Antwort

1

In einer Nuss Schale, lädt with() eine Beziehung mit Eltern-Modell zur gleichen Zeit. Das ist eifrige Last.

Wenn Sie nicht möchten, dass diese Daten geladen werden, können Sie Lazy Load oder Eager Lazy Load verwenden. In diesem Fall werden Daten geladen, wenn Sie die Beziehung tatsächlich verwenden. So können Sie zur Laufzeit entscheiden, was genau Beziehung zu ladende oder vielleicht werden Sie keine Beziehungsdaten auf allen usw.

2
Model::find(1)->with('firstModel','SecondModel'); 

laden wollen, ist nicht wirklich etwas überhaupt zu tun, als with ist ein neues Builder jetzt, der nicht mit dem Modell verwandt ist, das von find(1) zurückgegeben wird.

Model::with(....)->find(1); 

Würde eifrig laden die Beziehungen.

Model::find(1)->load(...); 

Ist faul eifrig laden. Es lädt die Beziehungen zu einer vorhandenen Model-Instanz, die Sie bereits abgerufen haben. (find(1) gibt eine Model-Instanz zurück, und load weist sie an, die angegebenen Beziehungen dann zu laden) load kann auch in Collections verwendet werden, um Beziehungen auf allen enthaltenen Model-Instanzen zu laden. load ist nützlicher, wenn Sie mit einer Menge von Modellen im Vergleich zu einer einzigen arbeiten, da nur die dynamische Eigenschaft (Lazy Loading, wenn nicht bereits geladen) für eine Beziehung in einem Model dieselben Abfragen ausführen würde. Auf einem Set wird jedes N + 1-Problem entfernt, während sie durchlaufen werden.

Sie können diesen Artikel für weitere Informationen zu diesem Thema lesen.

asklagbox - blog - Eloquent Querying Relations

1

with() Lasten mit Eltern Modell zur gleichen Zeit.

load() verwendet, wenn Sie Lazy Eager Loading benötigen. Zum Beispiel kann dies nützlich sein, wenn Sie dynamisch müssen entscheiden, ob verwandte Modelle laden:

$books = App\Book::all(); 

if ($someCondition) { 
    $books->load('author', 'publisher'); 
} 

Wenn Sie zusätzliche Abfrage Einschränkungen für die eifrige Lade Abfrage festlegen müssen, können Sie eine Schließung an die Last-Methode übergeben können:

$books->load(['author' => function ($query) { 
    $query->orderBy('published_date', 'asc'); 
}]); 
Verwandte Themen