เชี่ยวชาญด้านประสิทธิภาพของ Laravel
คุณต้องการเว็บแอปพลิเคชันที่รวดเร็ว แอปที่ทำงานช้าจะสร้างความหงุดหงิดให้กับผู้ใช้และส่งผลเสียต่อธุรกิจของคุณ ปัญหา "N+1 query problem" สามารถทำให้แอป Laravel ของคุณช้าลงได้ แต่ Laravel มีทางออก นั่นคือ eager loading
เทคนิคนี้จะช่วยให้คุณเชี่ยวชาญการใช้ method with() คุณจะได้เรียนรู้วิธีทำให้แอปของคุณทำงานได้อย่างรวดเร็วและมีประสิทธิภาพ
ลองมาดูตัวอย่างกัน คุณมีแพลตฟอร์มบล็อก โดยที่แต่ละโพสต์จะมีผู้เขียน (author) หนึ่งคน และคุณต้องการแสดงรายการโพสต์พร้อมกับผู้เขียนของแต่ละโพสต์
วิธีการทั่วไปคือการดึงข้อมูลโพสต์ทั้งหมดออกมาก่อน จากนั้นจึงค่อยดึงข้อมูลผู้เขียนของแต่ละโพสต์ ซึ่งจะส่งผลให้เกิดการ query ฐานข้อมูลจำนวนมาก
หากคุณมี 100 โพสต์ โค้ดนี้จะทำการ query ฐานข้อมูลถึง 101 ครั้ง นี่คือ "N+1 query problem" ซึ่งสร้างภาระงานส่วนเกิน (overhead) และทำให้แอปของคุณช้าลง
method with() สามารถแก้ปัญหานี้ได้ โดยจะดึงข้อมูล model ที่เกี่ยวข้องทั้งหมดภายในเพียงหนึ่งหรือสอง query
คุณสามารถใช้งานได้ดังนี้: $posts = App\Models\Post::with('author')->get();
โค้ดนี้จะดึงข้อมูลโพสต์ทั้งหมดและผู้เขียนของโพสต์เหล่านั้นภายในสอง query
คุณยังสามารถโหลดความสัมพันธ์หลายอย่างพร้อมกันได้: $posts = App\Models\Post::with(['author', 'category'])->get();
หรือโหลดความสัมพันธ์ซ้อนความสัมพันธ์: $posts = App\Models\Post::with('author.profile')->get();
Eager loading คือหัวใจสำคัญในการสร้างแอป Laravel ที่รวดเร็ว เพราะมันช่วยกำจัดปัญหา N+1 query และลดจำนวนการ query ฐานข้อมูลลง
ใช้ method with() เพื่อเพิ่มประสิทธิภาพการทำงานของแอปคุณ
ที่มา: https://dev.to/prabashanadev/mastering-laravel-performance-a-deep-dive-into-eager-loading-22l0