Ich lerne Laravel, und ich benutze Laravel 5.2. Ich möchte etwas über Eager Loading, Eager Loads und Eager Loading wissen. Was sind die Ähnlichkeiten und Unterschiede zwischen diesen drei? Können Sie für jedes von ihnen ein Beispiel geben? Ich habe Laravel Dokumentation gelesen, aber ich verstehe es immer noch nicht. Ich hoffe, Sie können eine klarere Erklärung geben. Vielen Dank.Eager Loading, Eager Lasten einschränken, Faul Eager Loading
Antwort
Nutshell:
Eager Loading
ermöglicht es Ihnen, die Beziehungen für einige Modelle effizient zu erhalten.
Constraining Eager Loads
Wieder macht es effizient, aber Sie können Ihre Ergebnisse z. Datumsbereich, spezifische ID etc
Lazy Eager Loading
Ist für, wenn Sie bereits Ihre Eltern Modelle haben geladen
Beispiel:
Ok, können Sie sagt einen Blog machen, wo Sie Beiträge haben und diejenigen Beiträge schreiben können habe Kommentare und Likes.
Szenario 1:
Sie wollen alle die Posts
mit ihren Comments
und ihre Likes
zu bekommen. Würden Sie alle Posst
laden und dann durchlaufen sie und erhalten Sie comments
und likes
? Nun, Sie könnten, aber das könnte am Ende sehr teuer sein, da es am Ende viele, viele Abfragen durchführen könnte. Oder Sie könnten die Beiträge laden und dann ihre id
s und laden Sie alle Kommentare, die Sie für diese id
s und das gleiche für dort likes auch benötigen. Dies ist im Wesentlichen, was Laravel
mit eifrigen Laden tut.
Szenario 2 (eine reale Welt Beispiel für Szenario 1):
Sie erstellen Sie für die Beiträge einzuziehen. So haben Sie alle Ihre Beiträge geladen und dann wollen Sie, wie viele Leute zeigen, und kommentieren es hat so würde man so etwas (sehr einfach) hat:
Controller:
$posts = App\Post::all();
return view('posts.index', compact('posts'));
Blade-Datei:
@foreach($posts as $post)
<h2>{{ $post->title }}</h2>
<p>{{ $post->description }}</p>
<p>
Likes: {{ $post->likes->count() }} <br>
Comments: {{ $post->comments->count() }}
</p>
@endforeach
Das obige würde funktionieren, aber für jede Schleife würde es tatsächlich die Datenbank abfragen. Ändern Sie Ihre Controller:
$posts = App\Post::with('likes', 'comments')->get();
return view('posts.index', compact('posts'));
Wird dann bekommen die comments
und likes
für alle der Posts
vorher die Datenbank speichern und Ihre Anwendung wesentlich effizienter machen.
Szenario 3
ich die Posts
zeigen wollen, aber ich will nur die letzten 3 comments
zeigen, die gemacht wurden.
$posts = App\Post::with(['comments' => function ($query) {
$query->limit(3);
}]);
Lazy Eager Loading
ist, wenn Sie bereits Ihre Posts
geladen und Sie müssen dann alle comments
oder likes
nach der Tat zu bekommen.Gleiches Prinzip, aber Sie würden load
anstelle von with
verwenden. Ein weiterer Grund, warum Sie Last verwenden könnten, ist, wenn Sie Route model binding
für Ihre Controller verwenden, so dass die Post
bereits abgerufen wurde, aber Sie wollen immer noch seine Beziehungen erhalten.
Hoffe diese Hilfe!
- 1. Lazy Loading vs Eager Loading
- 2. Eager loading funktioniert nicht
- 3. Rails eager loading Verbände
- 4. Schienen 3: Lazy Loading versus Eager Loading
- 5. Laravel 'mit' eager loading Umfang
- 6. Eager loading letzten untergeordneten Datensatz
- 7. Bookshelf.js Eager Loading Dritte Tabelle
- 8. Eager loading mit has_many durch
- 9. NHibernate Eager Loading Sammlungen + Paging
- 10. Lazy loading, Deferred Loading und Eager Loading im Entity-Framework
- 11. Entity Framework Eager Loading Multiple Levels Exception
- 12. Laravel Eager Loading - Laden nur bestimmte Spalten
- 13. Entity Framework - Eager Loading verwandte Entitäten
- 14. Laravel Model Eager loading und bestellung
- 15. Laravel 4.2 n + 1 ohne eager loading
- 16. Eager Loading Aggregat Wurzeln mit Entity Framework
- 17. Rails - eager loading mit has_many_through Verein
- 18. EF-Core Eager Loading zu einem ViewModel
- 19. Verschiedene Ergebnisse mit Laravel Lazy Eager Loading
- 20. Wann Lazy Loading/Eager Loading im Winterschlaf verwenden?
- 21. Warum Hibernate @OneToOne und @ManyToOne verwendet Eager Loading und @OneToMany und @ManyToMany verwendet Lazy Loading?
- 22. Get single record von has_many mit eager-loading in include
- 23. Entity Framework Eager Loading - Daten an ViewModel übergeben
- 24. Entitätsframework-Code Erste Suche vs SingleOrDefault (Eager Loading)
- 25. Schienen Eager loading has_many Assoziationen für ein vorhandenes Objekt
- 26. Wie in Laravel mit Suche eager loading zu tun
- 27. Kann ich laravel eager loading mit einem Join vortäuschen?
- 28. Laravel Eloquent Eager Loading: Beitreten gleiche Tabelle zweimal
- 29. Strategische Eager Loading für viele-zu-viele Beziehungen in Datamapper?
- 30. Wie verwende ich withTrashed, wenn ich mit eager loading abfrage?
Nun, ich verstehe es nicht wirklich. Weil ich in all Ihren Beispielen Beschränkungen/Beschränkungen für das verwenden kann, was ich laden möchte. Wird diese Beschränkung zur Ähnlichkeit zwischen ihnen? Was ist der Unterschied? Sorry, ich bin noch neu in diesem Thema –
@GraceMichelle Ja, das ist es ziemlich viel. Wenn du sie einschränken willst, kannst du es sein, musst du nicht. Der Hauptunterschied ist zwischen "eifrigem Laden" und "faulen eifrigen Laden" - der erste ist, wenn Sie die Eltern laden, und der zweite ist, wenn die Eltern bereits geladen sind. –
Gibt es eine weitere Ähnlichkeit? Ok, ich weiß über diese zwei Unterschiede Bescheid. Dann, was ist der Unterschied zwischen diesen zwei und "Constraint Eager Lasten"? –