Cara Menggunakan Laravel Scout dengan Database Driver
Check this article on Medium: @ngodingbang/cara-menggunakan-laravel-scout-dengan-database-driver-efa5683424a6
This article has been translated into English version: How to Setup Laravel Scout using Database Driver
Pendahuluan
Pernakah kamu membuat Eloquent query seperti ini?
Kita biasa membuat kode seperti ini untuk mencari daftar data pengguna berdasarkan nama, email, atau atribut lainnya. Jadi kamu cukup mengetikkan query tersebut secara manual menggunakan clause “IS LIKE” seperti kode di atas. Tahukah kamu bahwa di Laravel 9.x kita dapat melakukannya dengan cara yang jauh lebih baik menggunakan sebuah package dari Laravel yang bernama Laravel Scout? Jika kamu belum tahu, ada baiknya kamu baca dulu artikel di bawah ini.
Jadi Laravel Scout adalah sebuah package berbasis driver untuk menambahkan pencarian teks lengkap ke dalam sebuah model Eloquent. Laravel Scout sebenarnya sudah diperkenalkan sejak Laravel versi 5.3, tapi baru di Laravel 9.x ini mereka memperkenalkan driver baru bernama “database” dalam package mereka. Sederhananya, driver ini akan menggunakan clause where like
saat menyaring hasil dari database, sesuatu yang sebelumnya selalu diketik secara manual sebelumnya. Dan karena driver bekerja dengan menggunakan query, driver ini saat ini hanya mendukung penggunaan database MySQL dan PostgreSQL. Jadi bagi kamu yang ingin tahu cara menggunakan Laravel Scout di aplikasimu, berikut ini tahapannya.
Instalasi
Sebelum kita mulai, instal terlebih dahulu package ini dengan menjalankan perintah berikut di terminal.
composer require laravel/scout
Setelah proses instalasi selesai, publish file konfigurasi config/scout.php
menggunakan Artisan command vendor:publish
yaitu php artisan vendor:publish --provider="Laravel\Scout\ScoutServiceProvider"
. Lalu ubah default driver menjadi database
melalui file .env seperti ini.
SCOUT_DRIVER=database
or just directly change it at config/scout.php like these code shown below.
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Search Engine
|--------------------------------------------------------------------------
|
| This option controls the default search connection that gets used while
| using Laravel Scout. This connection is used when syncing all models
| to the search service. You should adjust this based on your needs.
|
| Supported: "algolia", "meilisearch", "database", "collection", "null"
|
*/
'driver' => env('SCOUT_DRIVER', 'database'),
];
Konfigurasi Model
Laravel Scout secara default akan menggunakan method toArray()
untuk menentukan indeks pencarian di dalam model tersebut. Untuk mengubahnya, gunakan method toSearchableArray()
pada model sebagai berikut.
<?php
namespace App\Models;
use App\Infrastructure\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Laravel\Scout\Searchable;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable, Searchable;
/**
* Get the indexable data array for the model.
*
* @return array
*/
public function toSearchableArray()
{
return [
'username' => $this->username,
'name' => $this->name,
'email' => $this->email,
];
}
}
Pada contoh model di atas, saya memakai “username”, “name”, dan “email” sebagai atribut yang dapat dicari oleh Laravel Scout. Jika kamu punya atribut lain yang ingin dicari, maka cukup sesuaikan saja dengan kode di atas. Dan jangan lupa untuk menggunakan trait Laravel\Scout\Searchable
di model tersebut, sehingga Laravel Scout dapat menjalankan fungsinya ke dalam model yang sudah kamu tentukan.
Implementasikan di Controller-mu
Dan taraaa, kamu dapat menemukan data pengguna hanya dengan melakukan ini di controller class-mu sebagaimana contoh di bawah ini.
Dan jika kita lihat pada aplikasi, maka inilah yang sebenarnya dilakukan oleh Laravel Scout pada saat proses pencarian data selesai.
Seperti yang bisa kita lihat, Laravel Scout hanya menjalankan query yang biasa kita gunakan sebelumnya yaitu select * from
users where (
users.
username like ‘%a%’ or …”
. Jadi Laravel Scout akan melakukan pencarian data pengguna dengan mencari data yang memiliki atribut seperti “a” pada nama pengguna, nama, atau email. Sesederhana itu, tetapi Anda tidak perlu mengetikkannya lagi secara manual di pengontrol Anda sebagaimana biasanya.
Penutup
Sejauh ini, kelemahan dari Laravel Scout yang menggunakan database driver adalah package ini tidak bisa digunakan untuk mencari data model yang memiliki relationship dengan model lain. Misalnya jika kita punya data di model User
, maka kita tidak dapat mencari data tersebut berdasarkan atribut nama peran yang ada di model Role
, dll.
Dan at last but not least, contoh source code dari tutorial di atas sudah saya sertakan di sini. Silakan cek jika kamu ingin mencobanya juga di local komputermu.
https://github.com/ngodingbang/laravel-scout-database-driver
Terima kasih sudah membaca!
Sumber
- Laravel Scout Official Documentation (https://laravel.com/docs/9.x/scout)
- (Laravel 9: Scout with NEW Database Driver) https://www.youtube.com/watch?v=7KbJIBM5VHg&t