Paradox
3 سال پیش توسط Paradox مطرح شد
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}%");
        }

ثبت پرسش جدید
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
-1
        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 3 سال پیش مطرح شد
0

@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 3 سال پیش آپدیت شد
-1

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

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 3 سال پیش آپدیت شد
0

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

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

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

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


Paradox
تخصص : در حال یادگیری
@paradox 3 سال پیش مطرح شد
0

@rezajahangir

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش آپدیت شد
0

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

$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 3 سال پیش مطرح شد
0

@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 3 سال پیش آپدیت شد
-1

شما تو فرمتون مقادیر 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 3 سال پیش مطرح شد
0

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


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

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