简体   繁体   中英

How to filter products in e-commerce shop by many inputs when some values can be empty

enter image description here

I have several inputs in order to filter products in the online shop. My question is, how can I filter products if some inputs are left without being filled/chosen. How should I query?

public function find()
{
    $categories = Category::all();

    if (isset($_GET['submit'])) {

        if (!empty($_GET['brand'])) {
            $selectedBrand = $_GET['brand'];
            echo 'You have chosen: ' . $selectedBrand;
        } else {
            echo 'Please select the value.';
        }
        $date = Request::get('date');
        $name = Request::get('name');

        $selected = $_GET['type'];
        $data = DB::table('product')->where('product.type', $_GET['type'])
            ->where('product.name', $name)
            ->join('shop', 'product.id', '=', 'shop.product_id')
            ->where('shop.releasedate', $date)
            ->get();
        return view('pages/catalog')->with(['product' => $data, 'categories' => $categories]);
    }
}

enter image description here

I have several inputs in order to filter products in the online shop. My question is, how can I filter products if some inputs are left without being filled/chosen. How should I query?

public function find()
{
    $categories = Category::all();

    if (isset($_GET['submit'])) {

        if (!empty($_GET['brand'])) {
            $selectedBrand = $_GET['brand'];
            echo 'You have chosen: ' . $selectedBrand;
        } else {
            echo 'Please select the value.';
        }
        $date = Request::get('date');
        $name = Request::get('name');

        $selected = $_GET['type'];
        $data = DB::table('product')->where('product.type', $_GET['type'])
            ->where('product.name', $name)
            ->join('shop', 'product.id', '=', 'shop.product_id')
            ->where('shop.releasedate', $date)
            ->get();
        return view('pages/catalog')->with(['product' => $data, 'categories' => $categories]);
    }
}

You can first check if your fields are filled and continue to query your model with when method

Logic

$date = null;
if($request->filled('date)){
  $date = $request->date;
}
// your other values can go here like above

$data = DB::table('product')->where('product.type', $_GET['type'])
            ->where('product.name', $name)
            ->join('shop', 'product.id', '=', 'shop.product_id')            
            ->when($date, function ($query, $transmission) {
                 // this query runs only if $date is `true` (has a value and not empty)
                 
                 return return $query->where('shop.releasedate','=', $date);
                                     ->orderBy('shop.created_at','desc);                            
            }, function ($query) {
                  // something you want to return if the $date is `false` (empty)
            })
            ->get();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM