تالار گفتمان nCIS.ir

نسخه‌ی کامل: منظور از with در الوکوئنت
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام منظور از خط زیر چی هستش؟ منظورم عبارت with هستش

$user = User::with('roles')->first(); 
مدل User رو همراه با رکوردهای متناظر اون توی جدول Role بصورت Eager Loading بارگذاری میکنه و ازطریق user->roles$ میتونید بهشون دسترسی پیدا کنید. از Relation های دیتابیس برای اینکار استفاده میشه.
سلام. ممنون
چرا به بصورت Eager Loading ؟
چون اگه ننویسین with باز هم میتونید ازطریق relation به roles دسترسی داشته باشین ولی بصورت Lazy Loading در میاد یعنی اولین باری که بخواین بهش دسترسی پیدا کنید، یک کوئری جداگانه میزنه و همون موقع لود میکنه اطلاعات رو. با with دارین میگین همه چیز همزمان بارگذاری بشه. البته این مواردی که دارم میگم توی Yii اینطوریه و هنوز مطمئن نیستم توی لاراول هم به همین شکل باشه. اگه اشتباه میکنم، از سایر دوستان تقاضا دارم اصلاح کنن.
الان چک کردم دیدم درسته:
http://laravel.com/docs/5.1/eloquent-rel...-relations
دستت درد نکنه. مزیت استفاده از with اون موقع چی میتونه باشه؟
(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 میلیون نفر باشد فقط دوتا کوئری به دیتابیس میزنه
البته باید یه تعادل بینشون برقرار کنید چون وقتی از Eager Loading استفاده میکنید، همه داده ها یکجا میان توی حافظه RAM