Validar que el campo no exista en base de datos ignorando el del propio usuario con Laravel Validators

El título nos puede marear un poco, no supe resumirlo.

Básicamente, si queremos validar que el campo no exista en base datos, desde un validator de Laravel pondremos algo parecido a:
(pongamos el ejemplo que tenemos un campo que se llama usuario/username en base datos que queramos que sea único)

Este sería un resumen el archivo App\Http\Requests\UpdateUserRequest.php

class UpdateUserRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            ...
            'surnames' => 'string|max:150',
            'username' => 'string|max:30|unique:users,username',
            ...
        ];
    }
}

Si nos fijamos en el campo username, entre otras validaciones (que sea un string como máximo 30 caracteres) tenemos unique, junto con la tabla; users y el campo que queremos que sea único; username.

Bien, esto nos funcionaría la primera vez cuando el usuario todavía no tiene un username… pero cuando vamos a actualizar el campo vamos a tener el problema que esta validación no nos permitiría enviar nuestro propio nombre de usuario ya que detectaría que ya existe en base de datos y nos lo echaría atrás.

En este caso tenemos que utilizar un validation rule diciéndole que ignore el username que esté relacionado con nuestro usuario (en este caso, el usuario logueado «request()->user()->id «):

public function rules()
class UpdateUserRequest extends FormRequest
{
    ...
    public function rules()
    {
        return [
            ...
            'surnames' => 'string|max:150',
            'username' => [ 'string', 'max:30', ValidationRule::unique( 'users' )->ignore( request()->user()->id ) ],
            ...
        ];
    }
}

¡Espero que os sirva!
Saludos 👨‍💻


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*