Fitur pencarian hampir selalu dibutuhkan โ untuk mencari artikel, produk, atau user. Di Laravel, membuatnya cukup sederhana dengan Eloquent. Artikel ini memandu Anda membuat pencarian yang rapi, termasuk di beberapa kolom sekaligus.
Langkah 1: Form Pencarian
Buat form sederhana dengan method GET agar kata kunci muncul di URL (bagus untuk berbagi & SEO):
<form action="/artikel" method="GET">
<input type="text" name="q" value="{{ request('q') }}" placeholder="Cari...">
<button type="submit">Cari</button>
</form>
Langkah 2: Query Pencarian di Controller
public function index(Request $request)
{
$query = Post::query();
if ($request->filled('q')) {
$keyword = $request->q;
$query->where('title', 'like', "%{$keyword}%")
->orWhere('content', 'like', "%{$keyword}%");
}
$posts = $query->latest()->paginate(10);
return view('posts.index', compact('posts'));
}
Langkah 3: Pencarian di Banyak Kolom dengan Aman
Saat menggabungkan pencarian dengan filter lain, bungkus kondisi orWhere dalam grup agar logikanya tidak bocor:
$query->where(function ($q) use ($keyword) {
$q->where('title', 'like', "%{$keyword}%")
->orWhere('content', 'like', "%{$keyword}%");
});
Tanpa pembungkus function, kondisi orWhere bisa membatalkan filter status/kategori Anda.
Langkah 4: Pertahankan Kata Kunci Saat Pagination
Agar kata kunci tidak hilang saat pindah halaman, tambahkan query string ke link pagination:
{{ $posts->withQueryString()->links() }}
Langkah 5: Menampilkan Hasil
@forelse ($posts as $post)
<h3>{{ $post->title }}</h3>
@empty
<p>Tidak ada hasil untuk "{{ request('q') }}".</p>
@endforelse
Tips Performa
- Untuk tabel besar,
LIKE %kata%bisa lambat karena tidak memakai index. Pertimbangkan fulltext index MySQL untuk pencarian teks. - Untuk pencarian skala besar, gunakan Laravel Scout dengan driver seperti Meilisearch atau Algolia.
Kesimpulan
Membuat fitur pencarian di Laravel cukup dengan where('kolom', 'like', "%kata%"), dibungkus grup kondisi bila digabung filter lain, dan withQueryString() agar kata kunci bertahan saat pagination. Untuk data yang sangat besar, tingkatkan ke fulltext index atau Laravel Scout. Untuk memahami query relasi, lihat panduan Eloquent Relationship kami.