فرض کنید:
$posts = Post::latest()->take(20)->get();
foreach ($posts as $post) {
echo $post->author->name;
}
ممکن است فکر کنید فقط یک Query برای گرفتن پستها داریم.
اما اگر
author را Eager Load نکرده باشید:1 Query → دریافت Posts
20 Query → دریافت Authorها
یعنی:
21 Query برای فقط 20 پست!
راه بهتر:
$posts = Post::with('author')
->latest()
->take(20)
->get();حالا دادههای موردنیاز رابطه هم از قبل دریافت میشوند.
🎯 اما نکته مهمتر:
حالا N+1 فقط باعث کندی نیست؛ در سیستم پرترافیک میتواند تعداد Queryهای Database را بهشدت افزایش دهد.
💡 همیشه بعد از نوشتن یک Feature از خودت بپرس:
«برای این صفحه واقعاً چند Query به Database ارسال میشود؟»
@CodeVerse_dev