Laravel: Validation unique à la mise à jour
Je sais que cette question a été posée de nombreuses fois avant, mais personne n'explique comment faire pour obtenir l'id lorsque vous êtes à la validation du modèle.
'email' => 'unique:users,email_address,10'
Ma règle de validation est dans le modèle alors, comment puis-je passer l'ID de l'enregistrement à la règle de validation.
Voici mes modèles/Utilisateur
protected $rules_update = [
'email_address' => 'required|email|unique:users,email_address,'.$id,
'first_name' => "required",
'last_name' => "required",
'password' => "required|min:6|same:password_confirm",
'password_confirm' => "required:min:6|same:password",
'password_current' => "required:min:6"
];
modèles/BaseModel
protected $rules = array();
public $errors;
/*
* @data: array, Data to be validated
* @rules: string, rule name in model
*/
public function validate($data, $rules = "rules") {
$validation = Validator::make($data, $this->$rules);
if($validation->passes()) {
return true;
}
$this->errors = $validation->messages();
return false;
}
source d'informationauteur user742736
Vous devez vous connecter pour publier un commentaire.
Une solution simple.
Dans votre Modèle
Dans votre Contrôleur, de l'action:mise à jour
Il est une manière élégante de le faire. Si vous utilisez des Ressources Contrôleurs, votre lien pour modifier votre dossier ressemblera à ceci:
Et dans votre UserRequest, la règle devrait être comme ceci :
Ou si votre lien pour modifier votre dossier ressembler à ceci:
Vous pouvez l'essayer aussi:
Si je comprends ce que vous voulez:
Dans le modèle de la méthode de mise à jour, par exemple, devrait recevoir le $id avec le paramètre.
Désolé mon mauvais anglais.
En Éclairer\Validation\Rules\Uniques;
Unique de validation de l'analyse de la chaîne de validation de la Règle de l'objet
Unique de la validation de modèle: unique:%s,%s,%s,%s,%s'
Correspondant: nom de la table, colonne, ignorer, colonne id, format wheres
C'est ce que j'ai fait. Je suis sûr qu'il y est un moyen plus efficace de le faire, mais c'est ce que je suis venu avec.
Model/User.php
Model/BaseModel.php
Je passe l' $user_id à la validation dans le contrôleur de
Controller/UserController.php
Ma solution:
Puis dans la validation:
La logique est que si l'adresse e-mail dans le formulaire est différent, nous avons besoin de validation, si l'e-mail n'a pas changé, nous n'avons pas besoin de valider, afin de supprimer cette règle de validation.
$validator = Validator::make(
array(
'E-mail'=>$request['email'],
),
array(
'E-mail' => 'required|e-mail|unique:les utilisateurs,e-mail,'.$demande de['id'],
));
'email' => 'required|e-mail|unique:les utilisateurs,email_address,'. $id .'ID'
Où ID est l'id primaire de la table
Trouvé le moyen le plus facile, fonctionne très bien alors que je suis à l'aide de Laravel 5.2
Pendant la mise à jour de Données Existantes Écriture du programme de validation de la manière suivante:
Ce va sauter en compte d'utilisateur existant de l'id unique de la valeur correspondant à la colonne spécifique.
une même solution, plus simple, testé avec la version 5.2
dans votre modèle
Juste une note de côté, la plupart des réponses à cette question en parler
email_address
tandis que dans Laravel est intégré auth système, le champ e-mail, le nom est justeemail
. Voici un exemple de comment vous pouvez valider un champ unique, c'est à dire un e-mail de la mise à jour:Dans un Formulaire De Demandevous faites comme ceci:
Ou si vous êtes à la validation de vos données dans un contrôleur directement:
P. S: j'ai ajouté quelques autres règles, c'est à dire nécessaire et e-mail, afin de faire de cet exemple clair pour les débutants.