سوال بپرسید
1

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

سوال بپرسید

سلام و عرض ادب

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

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

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

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

برچسب ها:
گزارش سوال
پرسیده شده در
آمار بازدید: 94

1 پاسخ

2

سلام

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

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

1
استاد صالحی بزرگوار ، عرض ادب و احترام فراوان خدمت شما، همانطوری که قبلا هم عرض کرده بودم، شما به حدی کامل و عالی و شیوا به تشریح مسائل میپردازین که آدم بارهای بار دلش میخواد پاسخ شما رو بخونه، از شما بی نهایت ممنونم ، با توضیح شما و کلام شیواتون الان به طور کامل فهمیدم که این کد دقیقا چه کاری انجام میده، از شما ممنونم که وقت ارزشمندتون در اختیار من گذاشتین و واقعا خوشحالم که با roxo q و مهمتر از اون با استاد بزرگواری مثل شما آشنا شدم که اینطور بی دریغ و با حوصله تمامی سئوالات رو پاسخ میده، از خدا براتون بهترین هارو آرزو میکنم ، سلامت و شاد و پرانرژی باشین، بازهم از لطف شما ممنونم – saman3230 در