madadi
5 سال پیش توسط madadi مطرح شد
1 پاسخ

تفاوت و کارکرد های with و has وwherehas

سلام وقت بخیر
ممنون میشم تفاوت سه تابع with -has-و wherehas رو تو لاراول بگید
به زبان فارسی اگر توضیح بدین ممنون میشم.
With همون join هست؟


ثبت پرسش جدید
سجاد
تخصص : برنامه نویس
@sajaddp 5 سال پیش مطرح شد
1

سلام
هنگامی که از with در هنگام دریافت داده از بانک اطلاعاتی استفاده می کنیم، میاد اطلاعات مرتبط رو هم همزمان میگیره.
برای مثال عبارت زیر رو در حالتی که جدول مربوط به مدل city یک ستون به اسم province_id داشته باشه نظر بگیرید:

App\City::with('province')->get();

در هنگام دریافت اطلاعات میاد بررسی میکنه که در ستون province_id چه اعدادی اومده، اونها یکتا میکنه و از جدول مربوطه اطلاعات رو می خونه و میشه برای تک تک داده ها مستقیم به اطلاعات جدول مرتبط دسترسی داشته باشیم.
این روش برای رفع مشکل n+1 کوئری که معمولا دردسر ساز هست کمک بسیار موثر محسوب میشه و قطعا با join تفاوت داره.
یک ویژگی دوست داشتنی در تابع with امکان استفاده بعد از دریافت داده هست. مثلا

$books = App\Book::all();

if ($someCondition) {
    $books->load('author', 'publisher');
}

همون طور که احتمالا قبلا هم دیدید روش پیاده سازی در آدرس زیر موجود هست:
Eager Loading


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

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