راکت
زمان مطالعه: 2 دقیقه

فیلتر کردن نتایج query ها با شروط مختلف

شاید عنوان این مطلب برای شما کمی گیج کننده باشه ، اما بزارید براتون با یک مثال سادش کنم شما دارای لیستی از مشتری هستید و اونا رو با دستور Customer::all() نمایش میدید اما شما میخواین دو لیست جداگانه از مشتری های که در کشور انگلیس و کشور خودمون هستن رو به نمایش بزارید . خوب شما چطور این کار رو برای ساخت دو لیست جداگانه از یک دستور انجام میدید ؟ برای این کار یک تابع به نام filter() وجود داره.

در زیر مثالی برای درک بهتر filter میزنم ، بطور معمول شما اطلاعات مشتریهاتون رو بصورت زیر دریافت میکنید.

$customers = Customer::all();

پس از برگشت اطلاعات بصورت بالا شما با استفاده از یک function داخل filter() به راحتی میتونید شرط خودتون برای نمایش اطلاعات رو مشخص کنید. بصورت زیر 

$uk_customers = $customers->filter(function ($customer) {
    return $customer->country == 'United Kingdom';
});

حالا شما دارای یک مجموعه (collection) جدید داخل متغیر $uk_customers هستید ، اما متغیر قدیمی $customers هنوز بدونه تغییر باقی مونده و شما میتونید برای داشتن لیست بعدی ازش استفاده کنید . حالا در زیر فیلتر دیگه ای برای مشتری های که در کشور خودمون هستن با متغیر بدون تغییر $customers بوجود میاریم .

$ir_customers = $customers->filter(function ($customer) {
    return $customer->country == 'Iran';
});

خب ، حالا شما داری دو لیست جدا گانه در متغیر های $uk_customers و $ir_customers هستید و میتونید از هر کدوم بطور جداگانه و در جداول جداگانه استفاده کنید . 

همچنین  تابع دیگه ای به اسم reject() وجود داره که عملی برعکس کار تابع filter رو انجام میده . برای مثال شما میخواین همه مشتری هاتون بجز مشتری های کشور انگلیس رو داشته باشید باید از کد زیر استفاده کنید . 

$non_uk_customers = $customers->reject(function ($customer) {
    return $customer->country == 'United Kingdom';
});

امیدوارم براتون مفید بوده باشه 

چه امتیازی برای این مقاله میدهید؟

در انتظار ثبت رای

حسام موسوی
حسام موسوی
طراح و برنامه نویس

بیشتر از ۱۵ سال هست که در حال برنامه‌نویسی و انجام پروژه های مختلف هستم و ۱۰ سالی هست که آموزش برنامه‌نویسی به علاقمندان حوزه برنامه نویسی میدیم در همه این مدت الان عاشق کدزنی و چالش‌های پروژه‌های مختلفم. به تدریس علاقه خاصی دارم و دوست دارم دانشی که در این راه بدست آوردم را در اختیار دیگران هم قرار بدم. 

دیدگاه و پرسش

در حال دریافت نظرات از سرور، لطفا منتظر بمانید