Contenido del curso

Manos a la obra con nuestro proyecto

Validación unique en Laravel sin duplicados

Resumen

Cuando trabajas con formularios en Laravel, uno de los retos más comunes es evitar registros duplicados sin romper la edición de datos existentes. Aquí aprenderás a configurar la regla unique en el controlador para validar URLs amigables al crear y editar publicaciones, ignorando el propio registro durante la actualización.

¿Cómo configurar la validación unique en el controlador?

La validación de campos únicos parte del bloque de reglas dentro del controlador. La idea es decirle a Laravel que revise la tabla post y confirme que el valor del campo URL amigable no se repita.

Para lograrlo, copias el bloque de validación existente y agregas el campo correspondiente con la regla unique:post. Esto obliga a que cada nuevo registro tenga una URL distinta a las ya guardadas [01:30].

¿Qué hace la regla unique en Laravel? Verifica que el valor enviado en el formulario no exista previamente en la columna indicada de una tabla. Si ya existe, devuelve un error de validación.

Después de guardar la configuración, también debes replicar el campo en el formulario y marcar las opciones necesarias para que la regla se aplique al envío.

¿Por qué falla la validación unique al editar un registro?

Aquí aparece el detalle interesante. Cuando editas un registro sin cambiar la URL amigable, Laravel detecta que ese valor ya existe en la base de datos y lanza el error de duplicado, aunque seas tú mismo el dueño del registro [02:45].

Es decir, la regla compara contra todos los registros de la tabla, incluido el que estás editando. Por eso necesitas una instrucción adicional que le indique a Laravel: revisa el resto de registros, pero ignora este en particular.

¿Cómo ignorar el registro actual durante la actualización?

La solución es pasar el ID del registro como segundo parámetro de la regla unique. Quedaría algo así:

php 'url_amigable' => 'required|unique:post,url_amigable,'.$id

Con esa coma seguida del ID, le dices a Laravel que excluya ese registro de la comparación. El resto de la tabla sigue siendo evaluado normalmente, así que la protección contra duplicados se mantiene intacta.

¿Cuándo debo usar el ID en la regla unique? Solo en el método de actualización (update). En la creación no existe un ID previo que ignorar, así que la regla básica unique:tabla,campo es suficiente.

¿Cómo probar que la validación funciona en crear y editar?

Para verificar que todo opera como esperas, conviene hacer un recorrido completo por ambos flujos. La prueba consiste en crear registros, editarlos y forzar duplicados intencionales.

  • Crea un registro con título nuevo y envía el formulario. Debe guardarse sin errores.
  • Crea un segundo registro con título otro. También se guarda correctamente.
  • Edita el registro otro sin cambiar la URL. Laravel debe permitir la edición sin marcar duplicado [04:30].
  • Edita el mismo registro y cambia su URL a nuevo. Aquí sí debe aparecer el mensaje de que el registro ya existe.

Este flujo confirma que la validación distingue entre comparar contra otros registros y comparar contra sí mismo, que es justo el comportamiento esperado en cualquier CRUD profesional.

¿Qué cambios pequeños generan grandes resultados?

Lo curioso es que toda esta lógica se resuelve con una modificación mínima: agregar el ID al final de la regla unique. No necesitas paquetes externos ni lógica compleja en el modelo.

Esta práctica se aplica en cualquier campo donde la unicidad importe: correos electrónicos, slugs, nombres de usuario o cualquier identificador público. La regla unique con exclusión de ID es una herramienta clave en el flujo de validación de Laravel.

Con estos ajustes, las funciones administrativas sobre la tabla de publicaciones quedan completas. El siguiente paso será diseñar el área pública, esa que verán los usuarios y clientes finales. ¿Ya implementaste esta validación en algún proyecto? Cuéntame en los comentarios cómo te fue.