سلام و عرض ادب
من در انجام یک پروژه به مشکلی برخوردم که با جستجو تو گوگل به این کد رسیدم، مشکلم با این کد حل شد اما هیچ درکی از این قطعه از کد ندارم و از دوستان می خواستم خواهش کنم که قبول زحمت کنند و این کد رو برای بنده تحلیل و توضیح دهند
whereHas('products', function($q) use ($pid){
$q->whereIn('products.id', $pid);
مشکل من با whereHas هستش و اینکه اون کلوژر فانکشن چیه و use اینجا برای چی استفاده شده، به طور کل میخوام بدونم این قطعه کد دقیقا چیه؟ درسته که تمام اطلاعات از 2 جدول که product.id درشون مشترک هست رو برای من به درستی برگردوند اما خب چرا از Has خالی یا مثلا دوتا where پشت سرهم استفاده نشده؟
توضیح اینکه من pid رو متغییری گذاشتم که حاوی id هایی گروه محصولات من هست
پیشاپیش ممنونم
سلام
دستور whereHas دقیقا مشابه عبارت has در لاراول کار می کند اما به شما اجازه می دهد که یک سری فیلترها را به صورت جداگانه در کوئری خود بنویسید.
whereHas(Tables, Closure function)
به جای عبارت Tables نام جدول موردنظر در پایگاه داده و Closure function تابع شرطی جایگزین می شود.
دستور whereIn این قابلیت را ایجاد می کند که بین مجموعه ای از آرایه ها جستجو کرده و اگر مورد مشابهی بود، آن را در اختیار بگذارد.
whereIn(Coulumn_name, Array);
به جای عبارت Column_name، نام ستون موردنظر و Array آرایه ای از مقادیر قرار می گیرد.
به مثال زیر توجه کنید:
$users = User::whereHas('posts', function($q){
$q->where('created_at', '>=', '2015-01-01 00:00:00');
})->get();
در این مثال تمام کاربرانی که دارای (whereHas) پست (post) هستند را برای ما استخراج کن به شرطی که (where) تاریخ ایجاد آنها بزرگتر از 01-01-2015 باشد.
حالا برای نمونه ای که شما ارسال کردید، مثلا می گوییم: تمام کاربرانی که دارای (whereHas) محصولی هستند را برای ما فراخوانی کن به شرطی که id محصول درون آرایه pid یافت شود (whereIn).
امیدوارم این پاسخ به شما کمک کرده باشد.
به جمع هزاران کاربر اینستاگرامی روکسو بپیوندید.