Validación única de Laravel para múltiples columnas
- Publicado el 15 noviembre, 2024
- Palabras: 287
La validación en Laravel tiene una regla Unique para verificar si existe algún registro en la base de datos. Pero, ¿qué sucede si desea que se cumpla una combinación de dos campos? Vamos a verlo

#La regla unique
La regla de validación unique de Laravel se utiliza para garantizar que el valor de un campo específico sea único en una tabla de base de datos determinada. La estructura básica de la regla única es:
'email' => 'unique:users'
En este caso, Laravel se asegurará de que el campo email sea único en la tabla users.
#Aplicando la regla unique
Supongamos que estamos creando un formulario de registro y queremos asegurarnos de que la dirección de correo electrónico de un usuario no se haya registrado antes. Así es como lo harías:
public function rules(): array
{
return [
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8',
];
}
#Ignorar un campo para una regla unique
A veces, durante las operaciones de actualización, desea ignorar el registro actual para la regla de validación única. Por ejemplo, cuando un usuario actualiza su perfil, su correo electrónico debe seguir siendo único, pero la validación debe ignorar la dirección de correo electrónico actual del usuario. Laravel le permite hacer esto utilizando el método ignore:
public function rules(): array
{
return [
'email' => [
'required',
Rule::unique('users')->ignore($this->user->id),
],
];
}
En este ejemplo, la regla unique garantizará que el campo email sea único, ignorando el correo electrónico del usuario actual.
#Personalizar el nombre de la columna
De forma predeterminada, Laravel supone que el nombre de la columna en la base de datos coincide con el nombre del campo en el formulario. Sin embargo, si el nombre de la columna es diferente, puedes especificar el nombre de la columna en la regla única:
'email' => 'unique:users,email_address'
Aquí, Laravel impondrá que el valor del campo email sea único en la columna email_address de la tabla users.
#Regla unique para dos columnas en la tabla
Pero, ¿qué sucede si debe validar que el email y el campo newsletter cumplan una condición? Es decir, un usuario puede registrar su email en un sistema de noticias a menos que el email ya exista y el campo newsletter esté activo.
public function rules(): array
{
return [
'email' => [
'required',
'email',
Rule::unique('users', 'email')->where('newsletter', true),
],
];
}
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión