ارسالها: 46
موضوعها: 7
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 14
54 بار تشکر شده در 29 پست
خدایی فارسی نبود؟
پست های وبلاگم رو به همراه نویسندش
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
مگه وقتی ریلیشن زدیم خودش ساب کوئری نمیزنه؟
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
خوب این که زیاد جالب نیست. برای مثال، توی Yii وقتی میگیم ریلیشن تعریف کردیم و گفتیم مثلاً ارتباط belongsTo داره با جدول User ازطریق فیلد user_id ، وقتی میگیم post->user$ خودش میره یه کوئری میزنه به جدول User و رکوردی که id اون با user_id اینطرف هست رو پیدا میکنه و اگه با with صدا بزنیم و together رو true کنیم، همون موقع Join میزنه. دیگه لازم نیست دستی جوین بزنیم. اگه قرار بود جوین بزنیم پس ریلیشن رو واسه چی تعریف کردیم؟
بطور مشابه، وقتی توی مدل User میایم یه ریلیشن hasMany با جدول Post برقرار میکنیم، وقتی میگیم user->posts$ خودش میره کوئری میزنه و تمام پستهای اون کاربر رو استخراج میکنه. مطمئناً لاراول هم رفتار مشابهی داره وگرنه Relationها عملاً بلا استفاده میشن.
ارسالها: 168
موضوعها: 2
تاریخ عضویت: اردیبهشت 1394
اعتبار:
12
تشکرها: 59
443 بار تشکر شده در 142 پست
راستی یادم رفت مهندس روشی که شما هم ذکر کردین Post::all() هم کار میکنه اما باعث ایجاد مشکل N+1 در لاراول میشه و Eager loading که من در بالا مثالشو زدم راه حلشه
موفقیت، نتیجه تشخیص درست است؛ تشخیص درست، نتیجه تجربه است؛ تجربه نیز اغلب نتیجه تشخیص نادرست است.
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
راستش من زیاد لاراول کار نکردم و این مثال رو هم از توی مستندات خودش پیدا کردم. این مشکل N+1 توی Yii هم هست و راه حل اونجا هم همین Eager Loading هست که البته با کمک فعال کردن together میشه فریمورک رو وادار کرد حتماً Join بزنه و از SubQuery استفاده نکنه. یادمه قبلاً توی لاراول خودش Join نمیزد و باید دستی Join میزدیم. منظورم اینه که با کمک with بازم SubQuery میزنه. حقیقتش اگه ابزاری که باهاش کار میکنیم رو به خوبی بشناسیم، خیلی بهتر میشه ازش استفاده کنیم. به استارتر شدیداً مطالعه مستندات رو توصیه میکنم. با توجه به علاقه زیادشون به لاراول و ازطرفی روحیه ای که ازشون میشناسم، اگه نتونن به خوبی از امکانات این فریمورک قدرتمند استفاده کنن، ممکنه ازش دلسرد بشن.