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

Validación única de Laravel para múltiples columnas

#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),
        ],
    ];
}

 

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión