Menggunakan UUID sebagai pengganti ID Laravel
Untuk menggunakan UUD sebagai pengganti ID, maka yang harus dipersiapkan adalah hal-hal sebagai berikut:
- Model
- Database
- Traits (fungsinya sama kayak Helper, fungsi ini dapat dipakai difungsi-fungsi lainnya)
-
Buat model dan migration Blog
$ php artisan make:model Blog -m
-
Setting Database
Schema::create('blogs', function (Blueprint $table) { $table->uuid('id')->primary()->unique(); $table->string('title'); $table->timestamps(); });
yang menjadi perhatian bagian uuid disetting sebagai primary dan unique.
-
Setting Model
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; class Blog extends Model { use HasFactory; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['title', 'id']; protected $primaryKey = 'id'; public $incrementing = false; protected $keyType = 'string'; }
increment disetting false, karena tidak menggunakan ID lagi.
-
Buat Traits Saya membuat file trait HasUuid sebagai file yang berfungsi untuk men-generate UUID pada folder Model\Traits. Berikut potongan kode nya:
<?php namespace App\Models\Traits; use Illuminate\Support\Str; trait HasUuid { /** * Boot the Has Uuid trait for the model. * * @return void */ public static function bootHasUuid() { static::creating(function ($model) { if (empty($model->{$model->getKeyName()})) { $model->{$model->getKeyName()} = Str::uuid(); } }); } }
-
Menambahkan file Trait HasUuid ke dalam Model Blog
yaitu memanggil HasUuid dengan
use HasUuid
dan menambahkanuse App\Models\Traits\HasUuid;
.<?php namespace App\Models\Test; use App\Models\Traits\HasUuid; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; class BlogTest extends Model { use HasFactory, HasUuid; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['title', 'id']; protected $primaryKey = 'id'; public $incrementing = false; protected $keyType = 'string'; }
Dengan menggunakan laravel tinker php artisan tinker
, kita menambahkan title dengan value "test 2".
$ php artisan tinker
Psy Shell v0.10.9 (PHP 7.3.31 — cli) by Justin Hileman
>>> BlogTest::create(['title' => 'test 2']);
dan hasilnya sebagai berikut:
[!] Aliasing 'BlogTest' to 'App\Models\Blog' for this Tinker session.
=> App\Models\Blog {#4617
title: "test 2",
id: Ramsey\Uuid\Lazy\LazyUuidFromString {#4622
uuid: "98ecfa52-8953-4476-b835-cc073e53db42",
},
updated_at: "2021-12-05 08:39:21",
created_at: "2021-12-05 08:39:21",
}
Untuk selanjutnya bisa dikembangkan sesuai kebutuhan codingan anda.