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?

Query untuk mencari data pengguna/user
Query untuk mencari data pengguna/user

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 querydriver 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.

bash

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.

plain

SCOUT_DRIVER=database

or just directly change it at config/scout.php like these code shown below.

scout.php

<?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.

User.php

<?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.

Menggunakan method Laravel Scout search() untuk mencari data pengguna
Menggunakan method Laravel Scout search() untuk mencari data pengguna

Dan jika kita lihat pada aplikasi, maka inilah yang sebenarnya dilakukan oleh Laravel Scout pada saat proses pencarian data selesai.

Contoh penggunaan Laravel Scout di browser
Contoh penggunaan Laravel Scout di browser

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.

ngodingbang/laravel-scout-database-driver

ngodingbang/laravel-scout-database-driver

Example of Laravel Application using Laravel Scout package with Database Driver.

Baca Selengkapnya

Terima kasih sudah membaca!


Sumber

Konten Terkait