Cara Menggunakan UUID Sebagai Primary Key di Laravel

sampul dengan logo laravel, laragon dan judul

Setiap kita ingin membuat tabel, pastinya kita membutuhkan id yang menjadi primary key pada data. Primary key ini haruslah unik dan merepresentasikan data yang kita punya. ID biasanya berbentuk nomer nomer increment yang dimulai dari angka satu dan seterusnya. Bagaimana jika kali ini kita membahas bagaimana kita menggunakan UUID alih alih menggunakan angka yang bisa ditebak

Apa Itu UUID?

UUID (Universally Unique Identifier) adalah metode untuk menghasilkan identifier (pengenal) yang unik secara universal. UUID digunakan dalam berbagai aplikasi dan sistem untuk mengidentifikasi entitas, seperti objek, dokumen, atau bahkan perangkat keras dan perangkat lunak.  

Contoh bentuk UUID

116c34de-3dcb-44bc-9511-a48242b9aaab

 

Kelebihan Menggunakan UUID

Karena UUID terdiri dari angka angka random, maka ini menjadikan data data yang direpresentasikan sulit ditebak oleh user yang jahil jika ingin memasukkan data dalam request ke server kita

Semisal saya mempunya product dengan ID 10, dengan mudahnya user akan memasukan angka ini ke url sehingga tampilan product yang bisa jadi rahasia bisa muncul. Tentu kita tidak menginginkan hal ini

Mungkin, hal ini sah sah saja seumpama data yang ditampilkan memang ditujukan untuk user seperti gambar di bawah ini

Single Product

Namun bagaimana jika yang dimasukkan adalah request ke server untuk menghapus data berdasarkan id yang mudah ditebak? Bahaya bukan. Maka dari itu kita membutuhkn UUID

Langkah Langkah

Saya asumsikan kalian sudah membuat project Laravel ya. Kalo masih bingung kalian bisa mengikuti caranya lewat postingan berikut

Baca Juga: Cara Instal Laravel 10 Di Laragon

Pertama kalian harus menginstal package lewat composer dengan perintah berikut

composer require ramsey/uuid

Lalu buat file bernama Uuids.php dalam folder App/Traits berisi kode berikut


<?php
namespace App\Traits;
use Ramsey\Uuid\Uuid;
trait Uuids
{
 
     /**
* Boot function from Laravel.
*/
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
if (empty($model->{$model->getKeyName()})) {
$model->{$model->getKeyName()} = Uuid::uuid4()->toString();
}
});
}
/**
* Get the value indicating whether the IDs are incrementing.
*
* @return bool
*/
public function getIncrementing()
{
return false;
}
/**
* Get the auto-incrementing key type.
*
* @return string
*/
public function getKeyType()
{
return 'string';
}
}
 

Fungsi Trait ini adalah untuk memberi tahu pada sistem Laravel bahwa khsus untuk field tertentu akan kita gantikan dengan value dari package yang sudah kita install

Sekarang gunakan trait ini di model yang diinginkan. Untuk kasus ini saya akan memberikan data data tabel produk menggunakan Uuid, sehingga model yang saya gunakan adalah Product

 

namespace App\Models;

use App\Traits\Uuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Product extends Model
{
    use HasFactory, Uuids;
    ....

}


Lalu kita ubah file migration product untuk field ID. Caranya 

Ganti kode ini

$table->id()

Menjadi seperti ini

$table->uuid('id')->primary()

Lalu kita migrate dengan perintah berikut

php artisan migrate

Jika kalian sudah mensetting factory untuk model kalian, kalian bisa memasukkan perintah berikut untuk mengisi dummy data dalam database secara otomatis

php artisan migrate:fresh --seed

Kita lihat


 

 

Comments

Popular posts from this blog

Cara Mengatasi Hang/Freeze Pada Laptop Asus TUF Gaming

Cara Menjalankan PHP 8 & Laravel 9 Pada Laragon

Tutorial NextJS 13 & Typescript: Membuat Navbar Dengan Shadcn/UI