เชี่ยวชาญด้านประสิทธิภาพของ 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