Cómo generar UUIDs en Laravel

En ocasiones no nos interesa mostrar el id incremental del registro de nuestra base de datos, para evitar esto hay varias formas de hacerlo. En esta entrada, vamos a ver una con el paquete Laravel Uuid que nos provee una forma sencilla de validar y generar UUID. Los UUID son identificadores únicos universales, es decir, un UUID es un identificador de 32 dígitos que solamente pertenecerá a un único registro y que no se repetirá en nuestra base de datos.

Instalamos el paquete:

Cuando finalice la instalación, vamos a Tinker ( php artisan tinker ) como en la entrada anterior para generar un UUID de ejemplo y ver que funciona correctamente:

Generar UUID desde Tinker

Podemos ver el formato que tiene un UUID. En la documentación del paquete hay más ejemplos de como generarlos, le puedes indicar la versión y otras opciones.

Ahora vamos a hacer que la tabla de posts tenga un campo UUID y que se genere automáticamente cuando creas un post.

Primero creamos la migración o modificamos la que ya teniamos:

Yo como ya la tenía, la he modificado. También podríamos crear una migración simplemente para añadir el campo.

Añadimos el código para crear el campo UUID:

Ejecutamos las migraciones y ya tendremos el campo en nuestra base de datos.

Ahora vamos a crear un Observer para que cada vez que se cree un post se añada el UUID automáticamente.

Ejecutamos el siguiente comando para que nos cree el Observer en app/Observers:

Abrimos el archivo generado y añadimos el siguiente código:

Un observer es un capturador de los eventos que lanzan los modelos de Eloquent en diferentes puntos de su ciclo de vida. Podrímos capturar un evento mientras se está eliminado el modelo, modificando… Aquí están todos los eventos que se pueden capturar. En este caso, es mientras se está creando (creating).

Ahora vamos a vincular el Observer creado al modelo Post. Creamos un Provider para los Observers:

Y añadimos el siguiente código:

Y finalmente, añadimos el Provider al array de Providers del archivo de config/app.php:

Con esto ya estaría vinculado y cada vez que se cree un Post se le añadirá el UUID automáticamente.

UUIDs en la base de datos

Como podemos ver ya se crean automáticamente, yo he generado los posts con los seeders.

Ahora vamos a ver cómo hacer que la key de la ruta sea el UUID en vez del id incremental. Con esto conseguiremos ya lo que planteabamos al principio de la entrada, ocultar el id incremental del registro y, en cambio, mostrar el UUID.

Para hacer esto tendremos que añadir el siguiente código al modelo para indicarle que la key de la url será el UUID:

Deberemos añadir o cambiar las rutas tanto en el archivo de rutas como en las vistas, para que en vez del id sea el UUID. Entonces, cuando bindeemos el modelo al método del controlador al haber añadido el método getRouteKeyName al modelo, ya obtendremos el modelo a partir del UUID, tal como pone en la documentación del paquete.

Y si accedemos a la ruta con el UUID, veremos el post al cual corresponda ese UUID:

UUID por parámetro en la ruta


Aloja tu proyecto en DigitalOcean: Obtén $200 de crédito gratis al registrarte a través de este enlace.

Si hay cualquier tipo de error en el post o te surge cualquier duda, no dudes en ponerlo en los comentarios o enviarme un correo desde la página de contacto.

? CONTACTAR

Deja una respuesta

  Acepto la política de privacidad