دستور whereHas و whereIn در لاراول

سلام و عرض ادب

من در انجام یک پروژه به مشکلی برخوردم که با جستجو تو گوگل به این کد رسیدم، مشکلم با این کد حل شد اما هیچ درکی از این  قطعه از کد ندارم و از دوستان می خواستم خواهش کنم که قبول زحمت کنند و این کد رو برای بنده تحلیل و توضیح دهند

whereHas('products', function($q) use ($pid){
        $q->whereIn('products.id', $pid);

مشکل من با whereHas هستش و اینکه اون کلوژر فانکشن چیه و use اینجا برای چی استفاده شده، به طور کل میخوام بدونم این قطعه کد دقیقا چیه؟ درسته که تمام اطلاعات از 2 جدول که product.id درشون مشترک هست رو برای من به درستی برگردوند اما خب چرا از Has خالی یا مثلا دوتا where پشت سرهم استفاده نشده؟
توضیح اینکه من pid رو متغییری گذاشتم که حاوی id هایی گروه محصولات من هست

پیشاپیش ممنونم

برچسب ها:
پرسیده شده در: 4 سال قبل
آمار بازدید: 2206
3

سلام

دستور 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).

امیدوارم این پاسخ به شما کمک کرده باشد.

ارسال شده در: 4 سال قبل
masoudsalehi (1725)
بیش از ۲ سال عضویت در روکسو بیش از ۲ سال عضویت در روکسو دارای 1000 کارما دارای 1000 کارما نظرات دریافتی:‌ بیش از 50 نظرات دریافتی:‌ بیش از 50 دارای 25 پاسخ صحیح دارای 25 پاسخ صحیح ارسال کننده پاسخ با 25 رای ارسال کننده پاسخ با 25 رای
1
استاد صالحی بزرگوار ، عرض ادب و احترام فراوان خدمت شما، همانطوری که قبلا هم عرض کرده بودم، شما به حدی کامل و عالی و شیوا به تشریح مسائل میپردازین که آدم بارهای بار دلش میخواد پاسخ شما رو بخونه، از شما بی نهایت ممنونم ، با توضیح شما و کلام شیواتون الان به طور کامل فهمیدم که این کد دقیقا چه کاری انجام میده، از شما ممنونم که وقت ارزشمندتون در اختیار من گذاشتین و واقعا خوشحالم که با roxo q و مهمتر از اون با استاد بزرگواری مثل شما آشنا شدم که اینطور بی دریغ و با حوصله تمامی سئوالات رو پاسخ میده، از خدا براتون بهترین هارو آرزو میکنم ، سلامت و شاد و پرانرژی باشین، بازهم از لطف شما ممنونم - saman3230 در 4 سال قبل
جهت ارسال پاسخ ابتدا عضو سایت شوید.