Multiple Filter Search in Laravel 5.8

min read

Day 23/100 #100DaysOfCode

Hôm nay tiếp tục tìm hiểu về laravel tiếp, mỗi ngày một kiến thức mới, thật là thú vị đúng không nào, bạn chỉ cần bỏ ra 1 tiếng hoặc 15,30 phút gì thôi và search từ khóa mà ta cần tìm hiểu và chịu đọc tí sẽ thu về rất nhiều điều hay mà ta có thể chưa biết đến. Sau đó hãy lưu lại nó, để sao này ta cần tới, cũng giống như tôi đang chia sẻ với mọi người vậy, lưu lại để đây, có khi cần tới thì xem lại

Có một form blade template như sau:

<form method="GET" action="/">
        <input type="text" name="term" id="term">
        <select name="categorie">
          <option value="iphone">Iphone</option>
          <option value="samsung">SamSung</option>
          <option value="nokia">Nokia</option>
          <option value="xiaomi">XiaoMi</option>
        </select>

        <select name="price">
        <option value="more-expensive">plus cher</option>
        <option value="less-expensive">Moins cher</option>
        </select>
        <button type="submit" name="search">Searh</button>
</form>

Trong Controller thiếp lập function show() , để kiểm tra request từ form như sau

public function show(Request $request)
{
	$categories = Category::query();
    $categories->when($request->term, function ($query, $term) {
        return $query->where('title', 'like', "%{$term}%");
    })->when($request->categorie, function ($query, $categorie) {
        return $query->where('categorie', 'like', "%{$categorie}%");
    })->when($request->price && in_array($request->price, ['more-expensive', 'less-expensive']), function ($query) use ($request) {
        return $query->orderBy('price', $request->price == 'less-expensive' ? 'asc' : 'desc');
    }, function ($query) {
        return $query->orderByDesc('id');
    })->paginate(15);

    return view('welcome', compact('categories'));
}

Có thể dùng thử cách bên dưới

if($request->has('search')){
	$categories = Category::query();
    $categories->where(function($query) use($request) {
        $query->where('title', 'LIKE', "%{$request->term}%" )
            ->orWhere ( 'categorie', 'LIKE', "%{$request->categorie}%" )
    });
	$categories->when($request->price && in_array($request->price, ['more-expensive', 'less-expensive']), function ($query) use ($request) {
        return $query->orderBy('price', $request->price == 'less-expensive' ? 'asc' : 'desc');
    }
	$categories->paginate(15);
}

 

x

Ủng hộ tôi bằng cách click vào quảng cáo. Để tôi có kinh phí tiếp tục phát triển Website!(Support me by clicking on the ad. Let me have the money to continue developing the Website!)