2016-06-13 25 views
5

ho passare attraverso la documentazione laravel, non ho avuto la differenza tra Con o carico nelle query, In quale condizione abbiamo bisogno di usare Con o carico? Descriverloqual è la differenza tra "con" e "carico" in laravel

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

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

La tua domanda ha risposto al post http://stackoverflow.com/questions/26005994/laravel-with-method-versus-load-method –

risposta

1

In un guscio di noce, with() carica un rapporto con il modello genitore allo stesso tempo. Questo è carico impaziente.

Se non si desidera caricare quei dati, è possibile utilizzare il carico pigro o il carico pigro avido. In questo caso i dati verranno caricati quando inizierai effettivamente a utilizzare la relazione. Così, si può decidere in fase di esecuzione che cosa esattamente relazione che si desidera caricare o forse non si vuole caricare i dati di relazione a tutti ecc

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

non è davvero fare qualsiasi cosa, come with è un nuovo Generatore ora non correlato al modello restituito da find(1).

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

Sarebbe desideroso caricare le relazioni.

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

È un caricamento pigro. Sta caricando le relazioni con un'istanza di modello esistente che hai già recuperato. (poiché find(1) restituisce un'istanza Modello e load glielo dice e quindi carica le relazioni specificate) load può essere utilizzato anche su Raccolte per caricare le relazioni su tutte le istanze del Modello contenute. load è più utile quando si ha a che fare con un insieme di Modelli rispetto a uno solo come se si stesse usando la proprietà dinamica (caricamento lento, se non già caricato) per una relazione su un Modello causerebbe l'esecuzione delle stesse query. Su un set rimuove qualsiasi problema N + 1 mentre scorre su di essi.

È possibile controllare questo articolo per ulteriori informazioni su questo.

asklagbox - blog - Eloquent Querying Relations

1

with() carichi con il modello genitore, allo stesso tempo.

load() utilizzato quando è necessario Lazy Eager Loading. Ad esempio, questo può essere utile se è necessario decidere in modo dinamico se caricare modelli correlati:

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

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

Se è necessario impostare vincoli di query aggiuntive sulla query eager loading, si può adottare una chiusura al metodo di carico:

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