Laravel : mise à jour d'un modèle avec des règles de validation uniques
Dans Laravel, la validation des champs lors des mises à jour du modèle est cruciale pour garantir l'intégrité des données. Cependant, des règles de validation uniques peuvent entraîner des problèmes lors de la mise à jour des enregistrements existants.
Considérez le code suivant dans une classe Repository :
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray());
$user->save();
return $user;
}
Ce code tente de revalider les champs du modèle, y compris les champs uniques tels que « nom d'utilisateur » et « e-mail ». Cependant, cette approche peut entraîner des erreurs de validation lors de la tentative de mise à jour d'enregistrements avec des valeurs uniques existantes.
Pour résoudre ce problème, nous devons exclure l'enregistrement actuel de la validation afin de permettre les mises à jour sans violer les contraintes uniques. Nous pouvons y parvenir en ajoutant l'identifiant de l'instance en cours de mise à jour au validateur. Voici comment procéder :
Transmettre l'identifiant de l'instance :
Transmettre l'identifiant de l'instance en cours de mise à jour à la méthode de mise à jour :
public function update($id, $data) {
$user = $this->findById($id);
$user->fill($data);
$this->validate($user->toArray(), ['id' => $id]);
$user->save();
}
Exclure l'enregistrement actuel de la validation :
Dans le validateur, nous utilisons le paramètre id pour détecter si nous mettons à jour ou créons la ressource :
Mise à jour : Pour des règles de validation uniques, ajoutez ,{$id} à la règle pour exclure l'enregistrement actuel. Par exemple :
'email' => 'unique:users,email,{$id}',
Création : Pour les règles de validation uniques, n’incluez pas l’identifiant. Par exemple :
'email' => 'unique:users,email',
En suivant ces étapes, nous pouvons mettre à jour avec élégance les modèles Laravel tout en garantissant que les contraintes de validation uniques sont respectées.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3