حسین حسین پور
6 سال پیش توسط حسین حسین پور مطرح شد
4 پاسخ

معایب eager loading در لاراول

در مستندات laravel مزایای eager loading به خوبی گفته شده ولی می خواستم بدونم آیا همیشه موقعی که به رابطه جداول نیاز داریم بهتره از این روش استفاده کنیم یا اینکه معایبی هم داره؟


ثبت پرسش جدید
حسین حسین پور
تخصص : طراح رابط کاربری، برنامه‌نویس
@hhp14111 6 سال پیش مطرح شد
2

سرچ دادم ، مثل اینکه معایبی نداره :)
طبق مستندات بهتره موقعی که احتیاج به join جداول دارید حتما از eager loading استفاده کنید.


مهدی ابراهیمی
تخصص : برنامه نویس وب
@azkia 6 سال پیش مطرح شد
1

سلام دوست عزیز این ویژگی دقیقا کارش چیه؟


حسین حسین پور
تخصص : طراح رابط کاربری، برنامه‌نویس
@hhp14111 6 سال پیش آپدیت شد
3

@azkia

سلام دوست عزیز.
در orm ها ما با یک مشکلی مواجهیم به نام \"N+1 query problem\". که اگر این رو سرچ کنید متوجه قضیه میشید.
ولی خلاصه بخوام بگم فرضا شما یک جدول خودرو (Cars) دارید و یک جدول دیگه مثلا چرخ (wheel) الان هر خودرو میتونه تعداد زیادی چرخ داشته باشه و هر چرخ متعلق به یک حودرو هستش (one-to-many relationship)
بعد فرضا ما کالکشن cars رو میگیریم . و بعدش چند خط پایین تر قراره یک حلقه بزنیم و مشخصات چرخ ها رو هم بگیریم .

$cars = Cars::all();
 foreach ($cars as $car ){
  $wheel_types[] = $car->wheel->type; 
  }

الان این حلقه یک query برای گرفتن کل خودرو ها و N تا query برای گرفتن چرخ ها در دیتابیس اجرا میکنه که این عمل میتونه دیتابیستون رو در تعداد درخواست های بالا فلج کنه و سایتتون بسیار کند میشه. راه حل استفاده از eager loading هستش یعنی موقع گرفتن خودروها بگیم که چرخ ها رو هم با همون query بگیر. که این جوری فقط دو تا query اجرا میشه و کدتون optimize میشه.

$cars = Cars::with('wheels')->all();  

که wheels جدول چرخ ها هستش.
توضیحات کامل تر در مستندات خود لاراول هستش.


مهدی ابراهیمی
تخصص : برنامه نویس وب
@azkia 6 سال پیش مطرح شد
1

اوه چه جالب. ممنون به خاطر وقتی که گذاشتید و توضیح که دادید. :)


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام