TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #157 1.13K
🚀 جلوگیری از مشکل N+1 در Eloquent با eager loading و withCount

خیلی از باگ‌ها و افت کارایی در اپ‌های لاراول از درخواست‌های اضافی دیتابیس (مشکل N+1) ناشی می‌شه. با استفاده از eager loading و withCount می‌تونید هم تعداد کوئری‌ها رو کم کنید و هم اطلاعاتی مثل تعداد ارتباط‌ها رو بدون کوئری‌های اضافی بگیرید. 💡

مثال عملی: فرض کنید مدل Post و رابطه comments دارید. اگر بدون eager loading لیست پست‌ها رو رندر کنید، هر بار که به comments دسترسی پیدا می‌کنید یک کوئری جدید اجرا می‌شه — N+1.

راه ساده و بهینه:

$posts = Post::with('comments')->get();
foreach ($posts as $post) {
// دسترسی به رابطه بدون کوئری اضافی
echo $post->comments->count();
}

// اگر فقط تعداد نیاز دارید، از withCount استفاده کنید:
$posts = Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count; // مقدار از همان کوئری اصلی
}


نکات عملی و بهترین روش‌ها:
- وقتی فقط تعداد رابطه لازم دارید از withCount استفاده کنید تا داده‌های اضافی لود نشه. 🔍
- برای بارگذاری شرطی (مثلاً فقط کامنت‌های تاییدشده) از closure در with استفاده کنید: with(['comments' => fn($q) => $q->where('approved', 1)]).
- برای دیتاست‌های بزرگ از chunk یا cursor استفاده کنید تا حافظه پر نشه. ⚠️

اشتباه رایج: افزودن eager loading برای روابطی که هرگز استفاده نمی‌شن — فقط روابط لازم را بارگذاری کنید تا از overhead جلوگیری کنید.

با این روش ساده، کوئری‌ها به‌مراتب کم‌تر و صفحه‌ها سریع‌تر بارگذاری می‌شن. امتحان کنید و بازخورد یا تجربه‌تون رو به اشتراک بذارید. 🙌

Laravel Docs — Eloquent Relationships

🔖 #Laravel #PHP #لاراول #Laravel #Eloquent #Performance #EagerLoading

👤 Developix

💎 Channel: @DevelopixLaravel
  • ❤ 9
  • 👍 1
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →