- #uuid
- #laravel
UUID's en laravel
Escrito por Jhon Achata el 29 de noviembre de 2022
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
# Con composercomposer create-project laravel/laravel uuid
# Con laravel installerlaravel new uuid
# Laravel con docker (sail)# agregamos también "?with=mysql" para que nos incluya# el contenedor de mysqlcurl -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:
# Navegamos a la carpeta del proyectocd ~/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.
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
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;use Illuminate\Database\Eloquent\Model;// Importar también este trait HasUuidsuse Illuminate\Database\Eloquent\Concerns\HasUuids;
class Task extends Model{ use HasFactory; use HasUuids; // Añadimos el trait
protected $fillable = [ 'title', ];}
Ejecutamos las migraciones
Resultado
Creamos una nueva tarea, desde tinker
./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.