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