Advertisement
Guest User

Untitled

a guest
May 27th, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * LAZY LOADING
  5. * Modo sujeito a (N+1)*N2*N3. Isso explode rapidinho.
  6. *
  7. * SELECT * FROM posts
  8. * SELECT * FROM categories WHERE id = ?
  9. * SELECT * FROM categories WHERE id = ?
  10. * SELECT * FROM categories WHERE id = ?
  11. * SELECT * FROM categories WHERE id = ?
  12. * SELECT * FROM categories WHERE id = ?
  13. */
  14.  
  15. $posts = Posts::all();
  16.  
  17. foreach ($posts as $post) {
  18. $post->category = Categories::find($post->category_id);
  19. echo $post->category->name;
  20. }
  21.  
  22.  
  23.  
  24. /**
  25. * LEFT JOIN
  26. * Consome muito recurso (memória e IO) além de ser potencialmente
  27. * lento em CPU caso haja deduplicação dos records do LEFT JOIN
  28. *
  29. * SELECT * FROM posts LEFT JOIN categories ...
  30. */
  31.  
  32. $posts = Posts::left_join('categories')->all();
  33.  
  34. foreach ($posts as $post) {
  35. echo $post->category->name;
  36. }
  37.  
  38.  
  39.  
  40. /**
  41. * EAGER LOADING
  42. * Modo eficiente em memória e CPU no MySQL e no PHP,
  43. * mas adiciona um pequeno (quase minúsculo) overhead de mais requisições pro MySQL
  44. *
  45. * SELECT * FROM posts
  46. * SELECT * FROM categories WHERE id IN ()
  47. */
  48.  
  49. $posts = Post::all();
  50.  
  51. $lookup = [];
  52. foreach ($posts as $post) {
  53. $lookup[$post->category_id] = $post->category_id;
  54. }
  55.  
  56. $categories = Category::where_in($lookup);
  57. foreach ($categories as $category) {
  58. $lookup[$category->id] = $category;
  59. }
  60.  
  61. foreach ($posts as $post) {
  62. $post->category = $lookup[$post->category_id];
  63. echo $post->category->name;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement