Generate Unique Slug di Laravel dengan Eloquent Sluggable Package

Generate Unique Slug di Laravel dengan Eloquent Sluggable Package

id3 min read • 2824 views

Laravel Unique Slug - Pada saat membangun situs web atau aplikasi, salah satu tantangan yang sering dihadapi adalah membuat URL yang ramah mesin pencari dan mudah diingat bagi user. URL yang clean dan deskriptif dapat meningkatkan SEO dan user experience secara keseluruhan. Dalam lingkungan Laravel, menghasilkan unique slug untuk judul atau nama entitas merupakan tugas yang umum dilakukan. Untungnya, ada solusi yang sederhana dan efektif untuk masalah ini: Eloquent-Sluggable package dari Cviebrock.

Apa itu Eloquent-Sluggable?

Eloquent-Sluggable adalah sebuah package Laravel yang dikembangkan oleh Colin Viebrock (cviebrock) yang memungkinkan kita dengan mudah menghasilkan unique slug dari column tertentu di model Eloquent kita. Slug adalah bagian dari URL yang berisi versi yang diubah dari teks asli, biasanya berisi karakter alfanumerik dan tanda hubung. Package ini akan menangani konversi teks title atau nama menjadi URL yang user friendly.

FYI. Di artikel ini saya akan melanjutkan project atau artikel yang pernah saya publish sebelumnya tentang pembahasan laravel 10 dan penggunakan sanctum package untuk membuat REST API di laarvel.

Baca: REST API CRUD dengan Laravel Sanctum

Generate Unique Slug

Untuk menggunakan paket Eloquent-Sluggable, kita dapat melakukan langkah-langkah berikut untuk mengintegrasikan paket ini ke dalam proyek Laravel:

Step 1: Instalasi Package

Buka terminal dan masuk ke direktori proyek Laravel. Kemudian, jalankan perintah berikut untuk menginstal paket Eloquent-Sluggable menggunakan Composer:

composer require cviebrock/eloquent-sluggable

Step 2: Config Model

Setelah selesai menginstal paket, kita harus menambahkan column yang akan menyimpan slug di tabel yang sesuai. Dalam contoh ini, mari kita anggap kita memiliki model Post dan ingin menghasilkan slug untuk kolom title. Buka file model Post dan tambahkan penggunaan trait Sluggable serta define property $sluggable:

use Cviebrock\EloquentSluggable\Sluggable;
....
....
use HasFactory, Sluggable;
....
....
public function sluggable(): array
{
    return [
        'slug' => [
            'source' => 'title'
        ]
    ];
}

Dalam contoh di atas, kita mendefinisikan bahwa slug akan dibangun atau digenerate dari kolom title dan hasilnya akan disimpan di kolom slug.

Oke, sekarang kita bisa menghapus static function booted yang sudah kita define sebelumnya di model Post seperti di bawah ini.

protected static function booted()
{
    static::creating(function ($post) {
        $post->slug = \Str::slug($post->title);
        $latestSlug =
            static::whereRaw("slug RLIKE '^{$post->slug}(-[0-9]*)?$'")
            ->latest('id')
            ->pluck('slug')
            ->first();

        if ($latestSlug) {
            $pieces = explode('-', $latestSlug);
            $number = intval(end($pieces));
            $post->slug .= '-' . ($number + 1);
        }
    });

    static::updating(function ($post) {
        $post->slug = \Str::slug($post->title);
        $latestSlug =
            static::whereRaw("slug RLIKE '^{$post->slug}(-[0-9]*)?$'")
            ->latest('id')
            ->pluck('slug')
            ->first();

        if ($latestSlug) {
            $pieces = explode('-', $latestSlug);
            $number = intval(end($pieces));
            $post->slug .= '-' . ($number + 1);
        }
    });
}

Kesimpulan

Eloquent-Sluggable package dari Cviebrock adalah package yang sangat berguna untuk menghasilkan slug URL yang user friendly dan unique di aplikasi Laravel kita. Dengan mengikuti langkah-langkah instalasi dan konfigurasi yang sederhana, kita dapat dengan mudah mengintegrasikan fitur ini ke dalam model Eloquent kita dan secara otomatis menghasilkan unique slug yang SEO friendly setiap kali kita membuat atau mengubah entitas.

Pastikan untuk selalu memeriksa dokumentasi resmi package ini untuk update dan informasi lebih lanjut tentang cara menggunakannya secara efektif dalam proyek Laravel teman-teman. Selamat mencoba! 🚀

Read Documentation: Eloquent Sluggable

Series: Laravel 10 Rest API using Sanctum
Published on July 29, 2023
Last updated on April 21, 2025

If you like this post and want to support us, you can support us via buymeacoffee or trakteer.