Laravel: actualizar un modelo con reglas de validación únicas
En Laravel, validar campos durante las actualizaciones del modelo es crucial para garantizar la integridad de los datos. Sin embargo, las reglas de validación únicas pueden causar problemas al actualizar registros existentes.
Considere el siguiente código en una clase de Repositorio:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray());
$user->save();
return $user;
}
Este código intenta revalidar los campos del modelo, incluidos campos únicos como "nombre de usuario" y "correo electrónico". Sin embargo, este enfoque puede provocar errores de validación al intentar actualizar registros con valores únicos existentes.
Para resolver este problema, debemos excluir el registro actual de la validación para permitir actualizaciones sin violar restricciones únicas. Podemos lograr esto agregando la identificación de la instancia que se actualiza al validador. Aquí se explica cómo:
Pase la identificación de la instancia:
Pase la identificación de la instancia que se está actualizando al método de actualización:
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray(), ['id' => $id]);
$user->save();
}
Excluir el registro actual de la validación:
En el validador, utilizamos el parámetro id para detectar si estamos actualizando o creando el recurso:
Actualización: Para reglas de validación únicas, agregue {$id} a la regla para excluir el registro actual. Por ejemplo:
'email' => 'unique:users,email,{$id}',
Creando: Para reglas de validación únicas, no incluya la identificación. Por ejemplo:
'email' => 'unique:users,email',
Siguiendo estos pasos, podemos actualice elegantemente los modelos de Laravel y al mismo tiempo garantice que se respeten las restricciones de validación únicas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3