راکت

فیلتر کردن جستجو

10 پاسخ

سلام وقتتون بخیر

من میخام جستجو رو بر اساس دسته بندی و اسم محصول و قیمت محصول انجام بدم
تو url نتیجه رو نمایش میده به این شکل

http://localhost:8000/?category=&title=%D9%84%D9%BE+%D8%AA%D8%A7%D9%BE+Lenovo+G580&price=9%2C900%2C000

ولی چیزی پیدا نمیکنه برام
برای ویو همچین فرمی در نظر گرفتم

<form action="{{ url('/') }}" class="form-inline" method="GET">
    <label for="category_filter">category</label>
    <select name="category" id="category_filter" class="form-control">
        <option value="">انتخاب کنید</option>
        @foreach($categories as $category)
            <option value="">{{ $category->name }}</option>
        @endforeach

    </select>

        <label for="title">title</label>
        <input type="text" class="form-control" name="title" id="title" placeholder="عنوان محصول">

        <label for="price">price</label>
        <input type="text" class="form-control" name="price" id="price" placeholder="قیمت محصول">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

        <button type="submit" class="btn btn-primary">جستجو</button>

</form>

کنترلر

        $products = Product::query();

        if($keyword = request('search')) {
            $products->whereHas('categories' , 'LIKE' , "%{$keyword}%")->where('title' , 'LIKE' , "%{$keyword}%")->orWhere('price' , 'LIKE' , "%{$keyword}%");
        }
Paradox
Paradox
@paradox
ثبت پرسش جدید

پاسخ‌ها

10
مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

        if($keyword = request('search')) {
            $products->where('title' , 'LIKE' , "%{$keyword}%")->orWhereHas('categories' , function ($query) {
            $query->where('???', 'like', "%{$keyword}%");
            })->orWhere('price' , 'LIKE' , "%{$keyword}%");
        }

جای ؟؟؟ اسم فیلدی از categories رو که میخوایید جستجو کنه رو وارد کنید

  • ضمنا تو view هم مقداری به option های categories نمیدید

    <option value="*************************">{{ $category->name }}</option>
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@mehranmarandi90
به این شکل ؟


        if($keyword = request('search')) {
            $products->where('title' , 'LIKE' , "%{$keyword}%")->orWhereHas('category' , function ($query) {
            $query->where('$category->slug', 'like', "%{$keyword}%");
            })->orWhere('price' , 'LIKE' , "%{$keyword}%");
        }

برای مقدار چی باید قرار بدم برای ویو ؟
این اشتباهه؟

            <option value="{{ $category->name }}">{{ $category->name }}</option>

شاید پاسخ شما همین‌جا باشد

مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

نه اين كد فكر ميكنم بدون خطا اجرا بشه

if($keyword = request('search')) {
    $products->where('title' , 'LIKE' , "%{$keyword}%")
    ->orWhereHas('category' , function ($query) use ($keyword){
        $query->where('slug', 'like', "%{$keyword}%");
        })
    ->orWhere('price' , 'LIKE' , "%{$keyword}%");
}

چيزي كه براي option نوشتيد درسته

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@mehranmarandi90
ممنونم ازتون جستجو که میزنم کل محصولات رو نمایش میده و فیلتر رو اعمال نمیکنه فقط تو url نمایش میده

localhost:8000/?category=لوازم+جانبی+موبایل&title=گارد+3Dدياموند+الماسى&price=26%2C000

dd که میگیرم به این صورت هست
تصویر

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام به شما دوست عزیز.
این جستجو چه زمانی میخواین اتفاق بیوفته؟
زمانی که اطلاعات محصول رو ثبت کردین، میخواین بین موارد موجود جستجو کنید یا اینکه قبل از ثبت محصول به عنوان مثلا میخواین بین دسته بندی ها، دسته بندی موردنظر رو جستجو کنید و دسته بندی رو انتخاب کنید و ادامه عملیات؟

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@rezajahangir

سلام میخام زمانی که اطلاعات محصول همه ثبت شدن کاربران سایت بتونن با انتخاب این ۳ فیلتر محصول خودشون رو جستجو کنن

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

کوئری شما باید به صورت زیر باشه.

$products = Product::query();
if($keyword = request('search')) {
    $products->where('title' , 'LIKE' , "%{$keyword}%")->orWhere('price' , 'LIKE' , "%{$keyword}%")
        ->orWhereHas('category' , function ($query) use ($keyword){
        $query->where('slug', 'LIKE', "%{$keyword}%");
    });
}
Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@rezajahangir
ممنونم اصلا فیلتر کار نمیکنه تمام محصولات نمایش میده
فرم من درسته ؟

<form action="{{ url('/') }}" class="form-inline" method="GET">
    <label for="category_filter">category</label>
    <select name="category" id="category_filter" class="form-control">
        <option value="">انتخاب کنید</option>
        @foreach($categories as $category)
            <option value="{{ $category->name }}">{{ $category->name }}</option>
        @endforeach

    </select>

        <label for="title">title</label>
        <input type="text" class="form-control" name="title" id="title" placeholder="عنوان محصول">

        <label for="price">price</label>
        <input type="text" class="form-control" name="price" id="price" placeholder="قیمت محصول">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

        <button type="submit" class="btn btn-primary">جستجو</button>

</form>
مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

شما تو فرمتون مقادیر category , title price رو ارسال میکنید و چیزی که تو کد مشخصه مقدار keyword رو در کوئری استفاده میکنید که متوجه نشدم از کجا اومد
اگر مقادیر اینها باشه شاید میتونید یه همچین کدی بنویسید

        $product_query = product::query();
        if (isset($request->title)){
            $product_query->where('title' , 'LIKE' , "%{$request->title}%");
        }
        if (isset($request->price)) {
            $product_query->where('price' , 'LIKE' , "%{$request->price}%");
        }
        if (isset($request->category)) {
            $product_query->WhereHas('category' , function ($query) use ($request){
                $query->where('slug', 'like', "%{$request->category}%");
            });
        }
        $product = $product_query->get();

دقت کنید که باید با توجه به اسم مدل خودتون و سایر شرایطی که تو متدتون دارید پیاده کنید، ولی کانسپت اصلی همینه.

Paradox
Paradox
@paradox

تخصص: در حال یادگیری

@mehranmarandi90
نه متاسفانه جواب نداد

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

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