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
Post a Comment