پوریا مستعان
3 سال پیش توسط پوریا مستعان مطرح شد
0 پاسخ

اعمال فیلتر های داینامیک در لاراول

من طبق آموزش پروژه محور لاراول attribute هارو اضافه کردم، حالا میخوام از طریق همین attribute ها عمل فیلتر کرن محصولات رو نمایش بدم، برای همین برای هر دسته بندی هم اینجاد attribute رو قرار دادم که خب شد یه رابطه بین category و attribute حالا همه چیز درسته نمایش دادن attribute ها و نمایش value ها کنارشون همه چی درسته، منتها شرطی که باید قرار داد و query که باید نوشت برای این کار رو که این چک کردن رو بررسی کنه نمیدونم به چه شکله.
این controller برای products :

 public function index()
    {
        $products = Product::query();

        if (request('category')) {
            $products->whereHas('categories', function ($query) {
                $query->where('id', request('category'));
            })->get();
        }

        if (request('brand')) {
            $products->whereHas('brand', function ($query) {
                $query->where('name', request('brand'));
            })->get();
        }

        $categories = Category::where('parent_id', 0)->get();
        $products = $products->latest()->paginate(20);
        $brands = Brands::all();

        $filters = Category::where('id', request('category'))->first();

        return view('home.products.index', compact('products', 'categories', 'brands', 'filters'));
    }

این مدل category

public function attributes()
    {
        return $this->belongsToMany(Attribute::class);
    }

اینم مدل attribute

public function values()
    {
        return $this->hasMany(AttributeValue::class);
    }

و اینم view صفحه کل محصولات :

@foreach($filters->attributes as $filter)
                                        @if($filter->filter == 1)
                                            <div class="filter-option">
                                                <p style="cursor: pointer" data-toggle="collapse"
                                                   href="#filter-section{{ $filter->id }}" role="button"
                                                   aria-expanded="true" aria-controls="category2">
                                                    بر اساس {{ $filter->name }}
                                                    <i class="now-ui-icons arrows-1_minimal-down pull-left"></i>
                                                </p>
                                                <div id="filter-section{{ $filter->id }}">

                                                    @foreach($filter->values as $val)
                                                        <div class="checkbox">
                                                            <input id="filter{{ $val->id }}" type="checkbox"
                                                                   value="{{$filter->name}}={{ $val->value }}">
                                                            <label for="filter{{ $val->id }}">
                                                                {{ $val->value }}
                                                            </label>
                                                        </div>
                                                    @endforeach
                                                </div>
                                            </div>
                                            <hr>
                                        @endif
                                    @endforeach

تا اینجا من میدونم توی ویو چیزی برای اعمال فیلتر ها وجود نداره، اما با فرض اینکه الان روی مثلا رنگ قرمز زدیم و URL به این شکل شده :

example.com/products?color=red

چطور میتونم یک query بذارم که مثلا فقط محصولات با رنگ قرمز رو بخونه ؟

@hesammousavi


ثبت پرسش جدید

به همدیگه کمک کنیم

به پوریا مستعان کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

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

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