راکت
ftp
ftp
توسط ftp مطرح شد
حل
4 پاسخ

اموزش ساخت lazy loadدر لاراول

@davoodkhany
@ali.bayat
میشه یه آموزش lazy load درلاراول رو معرفی کنید که ساده باشه


ثبت پرسش جدید
علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat6 سال پیشمطرح شد
1

به صورت پیش فرض ... دسترسی به داده ها در الکوئنت "Lazy loaded" هست.

یعنی وقتی از الکوئنت به شکل زیر استفاده میکنی:

$posts = Post:all();

کوئری که لاراول میسازه به این شکله:

select * from `posts`

حالا فرض کن این مدل پست یه رابطه (Relationship) از نوع belongsTo داره به مدل Category ..

  • هر Category میتونه چندین پست داشته باشه. (hasMany)
  • هر پست متعلق به یک Category هست. (belongsTo)
foreach ($posts as $post) {
    echo $post->category->name; // لیزی لود همینه 
}

مشکل این لیزی لود اینه که.. به ازای هر یک پست که در دیتابیس وجود داره یک کوئری بوجود میاد. مثلا اگر ۴۰ تا پست توی جدول داشته باشیم: تعداد کوئری که با همون یک خط بالا بوجود میاد برابر با ۴۰ + ۱ هست.

به این داستان مشکل N + 1 هم میگن.
برای همین توصیه میشه به جای اینکار (استفاده از لیزی لودینگ) از Eager-Loading استفاده بشه..


ftp
ftp
تخصص :ساده
@ftp6 سال پیشمطرح شد
0

@ali.bayat
اون Eager-Loading چطوریه ؟


علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat6 سال پیشمطرح شد

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

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