Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * LAZY LOADING
- * Modo sujeito a (N+1)*N2*N3. Isso explode rapidinho.
- *
- * SELECT * FROM posts
- * SELECT * FROM categories WHERE id = ?
- * SELECT * FROM categories WHERE id = ?
- * SELECT * FROM categories WHERE id = ?
- * SELECT * FROM categories WHERE id = ?
- * SELECT * FROM categories WHERE id = ?
- */
- $posts = Posts::all();
- foreach ($posts as $post) {
- $post->category = Categories::find($post->category_id);
- echo $post->category->name;
- }
- /**
- * LEFT JOIN
- * Consome muito recurso (memória e IO) além de ser potencialmente
- * lento em CPU caso haja deduplicação dos records do LEFT JOIN
- *
- * SELECT * FROM posts LEFT JOIN categories ...
- */
- $posts = Posts::left_join('categories')->all();
- foreach ($posts as $post) {
- echo $post->category->name;
- }
- /**
- * EAGER LOADING
- * Modo eficiente em memória e CPU no MySQL e no PHP,
- * mas adiciona um pequeno (quase minúsculo) overhead de mais requisições pro MySQL
- *
- * SELECT * FROM posts
- * SELECT * FROM categories WHERE id IN ()
- */
- $posts = Post::all();
- $lookup = [];
- foreach ($posts as $post) {
- $lookup[$post->category_id] = $post->category_id;
- }
- $categories = Category::where_in($lookup);
- foreach ($categories as $category) {
- $lookup[$category->id] = $category;
- }
- foreach ($posts as $post) {
- $post->category = $lookup[$post->category_id];
- echo $post->category->name;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement