Chào bạn! UUID (Universally Unique Identifier) là một chuỗi duy nhất được sử dụng phổ biến trong các ứng dụng để thay thế ID tự động tăng (auto-increment ID). Laravel 11 hỗ trợ UUID một cách dễ dàng với các tính năng tích hợp sẵn. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo UUID trong Laravel 11.

Mời bạn tham khảo thêm: Có nên sử dụng UUID làm khóa chính trong cơ sở dữ liệu?

1. Cài đặt Laravel 11

Trước tiên, nếu bạn chưa có dự án Laravel 11, hãy tạo một dự án mới bằng cách chạy lệnh:

shell
composer create-project laravel/laravel demo-codetuthub

Sau khi cài đặt hoàn tất, di chuyển vào thư mục dự án:

shell
cd demo-codetuthub

2. Tạo Model với UUID

Laravel hỗ trợ UUID thông qua trait HasUuid trong Eloquent Model. Hãy tạo một model mới:

shell
php artisan make:model Post -m

Mở file migration mới được tạo trong thư mục database/migrations/ và chỉnh sửa như sau:

php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

3. Sử dụng UUID trong Model

Trong file app/Models/Post.php, chúng ta thêm trait HasUuids để tự động tạo UUID khi một bản ghi mới được thêm vào:

php
app/Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Concerns\HasUlids;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasUlids;
    
    protected $keyType = 'string';
    public $incrementing = false;
    protected $fillable = ['title', 'content'];
}

Ở đây:

  • use HasUuids; giúp Laravel tự động sinh UUID thay vì ID số.
  • protected $keyType = 'string'; chỉ định kiểu dữ liệu của khóa chính là chuỗi.
  • public $incrementing = false; vô hiệu hóa auto-increment.

4. Chạy Migration

Chạy lệnh sau để tạo bảng trong database:

shell
php artisan migrate

5. Tạo dữ liệu mẫu

Chúng ta có thể thử tạo một bản ghi bằng cách sử dụng Tinker:

shell
php artisan tinker

Sau đó, chạy các lệnh sau:

php
use App\Models\Post;
Post::create(['title' => 'Bài viết đầu tiên', 'content' => 'Nội dung bài viết...']);

UUID sẽ được tự động sinh ra cho mỗi bản ghi.

6. Tạo UUID bằng Str helper

Ngoài cách sử dụng HasUuids, bạn cũng có thể tạo UUID thủ công bằng Str::uuid() hoặc Str::orderedUuid(), như sau:

php
use Illuminate\Support\Str;

$uuid = Str::uuid()->toString();
echo $uuid;

Hoặc sử dụng orderedUuid(), giúp UUID có thứ tự sắp xếp dễ dàng hơn:

php
$orderedUuid = Str::orderedUuid()->toString();
echo $orderedUuid;

UUID được tạo ra theo hai phương pháp này đều là duy nhất và có thể được sử dụng trong các bảng hoặc bất kỳ nơi nào trong ứng dụng của bạn.

7. Kết luận

Sử dụng UUID giúp hệ thống bảo mật hơn và tránh được các vấn đề liên quan đến ID tự động tăng. Laravel 11 hỗ trợ UUID một cách dễ dàng thông qua HasUuids, giúp việc triển khai trở nên đơn giản và hiệu quả. Ngoài ra, bạn cũng có thể sử dụng Str::uuid() hoặc Str::orderedUuid() để tạo UUID thủ công khi cần.

Hy vọng bài viết này giúp bạn hiểu rõ cách sử dụng UUID trong Laravel 11. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại bình luận bên dưới!

Source code: https://github.com/vantoantg/laravel-11-demo/tree/Laravel-11-UUID