sina
3 سال پیش توسط sina مطرح شد
6 پاسخ

ساخت فلتر در اراول

سلام دوستان
میخواستم بدونم چطور میتونم یک تابع مانند where در eloquent ایجاد کنم و چیزی رو که خودم میخوام بنویسم توش. مثلا بررسی کنه آیا وجه اشتراک بین یک آرایه که ما بهش میدیم و یک آرایه سریالایز شده در دیتابیش وجود داره یا نه... ممنونم از راهنماییتون
@milwad
@asp.gosk
@endworld
@mhyeganeh


ثبت پرسش جدید
مهدی اردشیر
تخصص : یه برنامه نویس
@mehdi0121 3 سال پیش مطرح شد
0

سلام اگه منظورتو درست متوجه شده باشم میتونی
توی مدلی که میخای یه فانکشن بساز ی و از $this استفاده کنی
یا میتونی اسکوپ بسازی
https://laravel.com/docs/9.x/eloquent#local-scopes


میلاد خسروی
تخصص : برنامه نویس بامزه
@milwad 3 سال پیش مطرح شد
0

سلام خسته نباشید
ببین یه وقتی هست که تو یه متد میخوای درست کنی که توی همه کنترلر ها داشته باشیش مثل مثلا where اون باید تو خوده لاراول اضافه کنی که اگه توسعه دهندش باشی میتونی و کار یکی دو روز نیست
اگه میخوای یه راهی هست به نام helper که از اون میتونی استفاده کنی لینک هم https://laravel-news.com/creating-helpers
اگه میخوای توی یه کنترلر یه متد داشته باشی که میتونی انتها اون اضافه کنی یا از Repository Pattern میتونی استفاده کنی
اگه میخوای یه متد توی مدل باشه که هر بار مدل رو صدا میزنی اون صدا زده بشه از این لینک استفاده کن https://laravel.com/docs/9.x/eloquent#local-scopes


sina
@s.aerospace 3 سال پیش مطرح شد
0

@mehdi0121
@milwad
خیلی ممنونم از راهنمایی شما دوستان عزیز.. ببینید من میخوام مثلا فیلتر یک سری محصول رو بر اساس رنگ انجام بدم. کاربر چند تا رنگ رو انتخاب میکنه و یک آرایه شامل id اون رنگها رو میفرسته.. حالا من رنگهای موجود اون کالا رو توی دیتا بیس به صورت آرایه ذخیره کردم. میخوام اگر این دو آرایه حتی اگر یک عنصر یکسان هم داشتن اون کالا برای من بازگردونده بشه. ما توی where یک عنصر رو توی دیتا بیس با یک عنصر که از کلاینت میاد مقایسه میکنیم. حالا میخوام تابعی داشته باشم که پیش از paginate این کارو برام بکنه.. دلیل اصرارم برای اینکه پیش از paginate باشه این هست که مثلا ممکنه من 10تا کالا رو با paginate برگردونم و بعد از فیلتر اون 10 تا بشه 2 تا.. امیدوارم تونسته باشم منظورم رو برسونم.. یه چیزی مثل کد زیر میخوام:

     $products = Product::where([array], [array])->paginate(10);
        or
        $products = Product::where(int, [array])->paginate(10);

در کد اول اگر دو آرایه یک استراک هم داشتند محصول رو برگردونه و در کد دوم اگر عدد داخل دیتا بیس برابر با یکی از عناصر آرایه کلاینت برابر بود محصول رو برگردونه.


محمدجواد صیدی
تخصص : برنامه نویس وب
@mrjavadseydi 3 سال پیش مطرح شد
0

سلام
اگه درست متوجه شده باشم میتونین از whereBlongsTo استفاده کنید

Post::whereBelongsTo($user)->get();

اگر رلیشن هم ندارن میتونین از whereIn استفاده کنید

$products = Product::whereIn(int, [array])->paginate(10);

منابع :
https://laravel.com/docs/9.x/collections#method-wherein
https://laravel.com/docs/9.x/eloquent-relationships#querying-belongs-to-relationships


میلاد خسروی
تخصص : برنامه نویس بامزه
@milwad 3 سال پیش مطرح شد
0

ببین میتونی از whereIn استفاده کنی
کارش اینه که میاد اون چیزی که میفرستی در ایدی میبینه و اگه بود ارسال میکنه


حسن هادیزاده
تخصص : برنامه نویس
@ha3an.8517 3 سال پیش مطرح شد
0

سلام
نمیدونم مشکلت حل شده یا نه اگر نشد خوشحال میشم که بتونم بهت کمک کنم
اینجوری که متوجه شدم وقتی فیلتر انجام میشه با Form یسری ایدی میفرستی که هر ایدی رنگ متفاوب داره و حر محصول شما هم در دیتا بیس با همون ایدی که با رنگ مشخص است ذخیره شده میتونین از این کد استفاده کنید

Product::where('color' , '=' , $request->id)->latest()->get()
میره هر محصولی که با این ایدی برابر است را بر میگردونه. امید وارم تونسته باشم کمکی کنم


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

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