• #uuid
  • #laravel

UUID's en laravel

Introducción

En lugar de usar números enteros auto incrementados como claves principales de nuestros modelos de Eloquent, ahora podemos optar por usar UUID's en su lugar.

Los UUID son identificadores alfanuméricos únicos universales que tienen 36 caracteres de largo.

En la versión 9.30.1 de laravel, se agregó la opción de poder usar UUID como identificadores de los modelos de eloquent (PR #44074).

¿Cómo podemos lograr esto?, te muestro a continuación:

Configuración inicial de la aplicación

Tenemos varias opciones para crear un nuevo proyecto de laravel

Terminal
# Con composer
composer create-project laravel/laravel uuid
# Con laravel installer
laravel new uuid
# Laravel con docker (sail)
# agregamos también "?with=mysql" para que nos incluya
# el contenedor de mysql
curl -s "https://laravel.build/uuid?with=mysql" | bash

En mi caso, usaré laravel sail, que esta disponible para Mac y Linux, en Windows se debe configurar previamente WSL (Windows Subsystem for Linux)

Levantamos el proyecto:

Terminal
# Navegamos a la carpeta del proyecto
cd ~/your-path/uuid
# Iniciamos los contenedores con el comando
./vendor/bin/sail up -d

Modelo Task y migraciones

Creamos un nuevo modelo Task, usamos la opción -m, para generar también la migración.

Crear modelo Task

Editamos la migración y agregamos el campo title

Schema::create('tasks', function (Blueprint $table) {
$table->uuid('id'); // columna de tipo uuid
$table->string('title');
$table->timestamps();
});

Ahora agregamos el campo title para la asignación masiva en la propiedad $fillable del modelo

Task.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
// Importar también este trait HasUuids
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class Task extends Model
{
use HasFactory;
use HasUuids; // Añadimos el trait
protected $fillable = [
'title',
];
}

Ejecutamos las migraciones

Ejecutar migraciones

Resultado

Creamos una nueva tarea, desde tinker

Terminal
./vendor/bin/sail tinker

$task = Task::create([
'title' => 'Nueva tarea'
]);
// Al imprimir el id, obtenemos un uuid
$task->id; // "97ddb274-d2d6-4dfb-b23d-6f7c50f58f51"

Puedes encontrar mas información acerca de los Uuid en la documentación de laravel.

Te puede interesar: Entorno de desarrollo de laravel con docker