رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
منظور از with در الوکوئنت
#1
سلام منظور از خط زیر چی هستش؟ منظورم عبارت with هستش

$user = User::with('roles')->first(); 
پاسخ
تشکر شده توسط:
#2
مدل User رو همراه با رکوردهای متناظر اون توی جدول Role بصورت Eager Loading بارگذاری میکنه و ازطریق user->roles$ میتونید بهشون دسترسی پیدا کنید. از Relation های دیتابیس برای اینکار استفاده میشه.
پاسخ
تشکر شده توسط:
#3
سلام. ممنون
چرا به بصورت Eager Loading ؟
پاسخ
تشکر شده توسط:
#4
چون اگه ننویسین with باز هم میتونید ازطریق relation به roles دسترسی داشته باشین ولی بصورت Lazy Loading در میاد یعنی اولین باری که بخواین بهش دسترسی پیدا کنید، یک کوئری جداگانه میزنه و همون موقع لود میکنه اطلاعات رو. با with دارین میگین همه چیز همزمان بارگذاری بشه. البته این مواردی که دارم میگم توی Yii اینطوریه و هنوز مطمئن نیستم توی لاراول هم به همین شکل باشه. اگه اشتباه میکنم، از سایر دوستان تقاضا دارم اصلاح کنن.
پاسخ
تشکر شده توسط:
#5
الان چک کردم دیدم درسته:
http://laravel.com/docs/5.1/eloquent-rel...-relations
پاسخ
تشکر شده توسط:
#6
دستت درد نکنه. مزیت استفاده از with اون موقع چی میتونه باشه؟
پاسخ
تشکر شده توسط:
#7
(16-08-1394، 11:35 ق.ظ)tux-world نوشته: دستت درد نکنه. مزیت استفاده از with اون موقع چی میتونه باشه؟

آقای شهرکی گفتن دیگه با with میگیم به روش eager loading برو role های اون کاربرو بازیابی کن

مزیت eager loading هم اینه که مثلا فرض کن شما 1000 تا کاربر تو جدولت داری به روش معمول یا همون lazy loading باید 1001 کوئری به دیتابیس بزنی چون میاد هربار role_id اون کاربرو در زمان اجرا میخونه و یک کوئری به جدول roles میزنه تا اطلاعاتشو بدشت بیاره حالا فرض کنید کاربرانتون 1 میلیون نفر باشه به این مشکل میگین N+1

ولی با eager loading اگر تعداد کاربرانتون چه 1 نفر چه 1 میلیون نفر باشد فقط دوتا کوئری به دیتابیس میزنه
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.



پاسخ
تشکر شده توسط:
#8
البته باید یه تعادل بینشون برقرار کنید چون وقتی از Eager Loading استفاده میکنید، همه داده ها یکجا میان توی حافظه RAM
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان