Chức năng tìm kiếm với Laravel

Chức năng tìm kiếm với Laravel hướng dẫn tạo form tìm, tiếp nhận từ khóa, select dữ liệu phù hợp , hiện sản phẩm, phân trang…


Mục lục

Tạo form tìm kiếm

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" >
<div id="timkiem" class="col-10 p-2 mx-auto">
  <form class="border border-primary p-2 row" action="" method="get">
  <input class="border border-primary p-2 col-6" placeholder= "Từ khóa">
  <button type="submit" class="btn btn-primary p-2 col-2">Tìm </button>
  </form>
  <div id="ketquatim">
     <!-- kết quả tìm kiếm -->
  </div>
</div>

Routing vào chức năng tìm kiếm

Route::get("/timkiem", function(){ return view('timkiem');});

Tiếp nhận từ khóa và select sản phẩm từ database

Trong routes/web.php, code lại route timkiem để : tiếp nhận từ khóa trong querystring, select các sản phẩn có tên chứa từ khóa rồi đưa kết quả cho view hiển thị. Kết quả như sau:

use Illuminate\Http\Request;
Route::get("/timkiem", function(Request $request){ 
  $tukhoa = ($request->has('tukhoa'))? $request->query('tukhoa'):"";
  $tukhoa = trim(strip_tags($tukhoa));
  $listsp=[];
  if ($tukhoa!=""){
    $listsp = DB::table("sanpham")->where("tensp", "like", "%$tukhoa%")->get();
  }
  return view('timkiem', ['tukhoa'=> $tukhoa , 'listsp'=>$listsp]);
});

Tạo view hiện dữ liệu

– Vào https://getbootstrap.com/docs/5.3/components/list-group/#custom-content  rồi nhắp nút Copy code (xem hình):

– Mở file views/timkiem.blade.php và Paste code vửa copy vào mục kết quả tìm kiếm

– Trong code vừa paste có 3 tag a. Hãy xóa 2 tag a đầu, chỉ chừa lại 1 tag a cuối. Kết quả như sau

– Code để hiện thông tin của sản phẩm trong tag a. Xem hình gợi ý như sau:

Kết quả code sẽ thế này:

Giờ thì thưởng thức kết quả . Vào http://localhost:8000/timkiem , gõ từ khóa và xem dữ liệu hiện ra theo từ khóa:

Phân trang

Kết quả tìm kiếm có thể rất nhiều (tùy thuộc dữ liệu trong database và từ khóa) cho nên cần thêm phân trang

a. Sử dụng lib paginator để phân trang

Đầu file routes/web.php , code 2 lệnh sau để use Paginator (thanh phân trang) và yêu cầu nó phát sinh code tương thích với bootstrap:

use Illuminate\Pagination\Paginator;
Paginator::useBootstrap();

b. Tạo các trang dữ liệu

Trong route timkiem, bỏ hàm get() thay bằng hàm paginate() để phát sinh các trang dữ liệu như sau:

c. Hiện các link phân trang trong view:

Mở views/timkiem.blade.php , gọi hàm links()  ở sau list group để hiện các link phân trang

d. Test: Vào xem http://localhost:8000/timkiem, gõ từ khóa để xem kết quả đã phân trang


Chức năng tìm kiếm với Laravel không khó phải không nào, đơn giản thôi. Bạn nếu muốn đưa form vào layout của mình thì thêm lệnh @extends ở đầu view là xong. Bạn cũng có thể biến thể 1 chút bằng cách đưa form tìm kiếm vào trong layout cũng được, hãy làm thử xem nhé.