anilkumarthakur60's avatar

Sort product after searching product

I am doing an e-commerce project, I got a list of products displayed in product_searched_list.blade.php after search query or after going through category dropdown. i want to sort the list of the product after searching how can i implement such functionality

method for a list of the product after search

    public function product_search(Request $request){

        $querys=$request->search_query;
        if($request->category=='all'){

            $product = Product::where(function ($query) use ($querys) {
                $query->where("name","like","%".$querys."%")
                    ->orWhere("description","like","%".$querys."%")
                    ->orWhere("color","like","%".$querys."%")
                    ->orWhere("size","like","%".$querys."%");
                })->paginate(8)    ;
        }else{
            $category=Category::where('slug',$request->category)->firstOrFail();
            $cat_id=$category->id;
            $product = Product::where('category_id',$cat_id)->where(function ($query) use ($querys) {
                $query->where("name","like","%".$querys."%")
                    ->orWhere("description","like","%".$querys."%")
                    ->orWhere("color","like","%".$querys."%")
                    ->orWhere("size","like","%".$querys."%");

                })->paginate(8);

        }

        return view('frontend.product_list')->with('product',$product);


         }

this result is displayed in product_searched_list.blade.php...in this blade file ...i want to do some sort query how can i implement such functionality

0 likes
12 replies
ideepesh's avatar

Before pagination use orderby and provide the column you want to sort.

anilkumarthakur60's avatar

searched result is displayed in a page ....after displaying the product i want to do some sorting query ....

ideepesh's avatar

What I think you can do is you have to send one more variable(sort) to the same request for searching the product. If the value for the sort is true then use orderby or else everything will remain the same.

MichalOravec's avatar
Level 75

Start thinking about your code...

public function search(Request $request)
{
    $products = Product::when($request->search, function ($query, $search) {
        return $query->where(function ($query) use ($search) {
            $query->where('name', 'like', $search = "%{$search}%")
                ->orWhere('description', 'like', $search)
                ->orWhere('color', 'like', $search)
                ->orWhere('size', 'like', $search);
            });
    })->when($request->category && $request->category != 'all', function ($query) use ($requst) {
        return $query->whereHas('category', function ($query) use ($request) {
            $query->where('slug', $request->category);
        });
    })->orderBy('something')->paginate(8);

    return view('frontend.product-list', compact('products'));
}
anilkumarthakur60's avatar

i have again a few queries for you.....does this work even for passing subcategory slug by making change in above code

public function search(Request $request)
{
    $products = Product::when($request->search, function ($query, $search) {
        return $query->where(function ($query) use ($search) {
            $query->where('name', 'like', $search = "%{$search}%")
                ->orWhere('description', 'like', $search)
                ->orWhere('color', 'like', $search)
                ->orWhere('size', 'like', $search);
            });
    })->when($request->category && $request->category != 'all', function ($query) use ($requst) {
        return $query->whereHas('category', function ($query) use ($request) {
            $query->where('slug', $request->category);
        });
    })->when($request->sub_category, function ($query) use ($requst) {
        return $query->whereHas('sub_category', function ($query) use ($request) {
            $query->where('slug', $request->sub_category);
        });
    })->orderBy('something')->paginate(8);

    return view('frontend.product-list', compact('products'));
}
MichalOravec's avatar
>when($request->sub_category, function ($query) use ($requst) {
        return $query->whereHas('sub_category', function ($query) use ($request) {
            $query->where('slug', $request->sub_category); // here use sub_category and not category
        });
    })
->orderBy('something') // here use your real column from products table
anilkumarthakur60's avatar

i got all about this...never done this type of query before thank you so much

Please or to participate in this conversation.