Je fais la validation de cette façon.
$rules = [
'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this>get('example_id').',example_id'
];
return $rules;
Cependant, je n'obtiens pas de succès.
L'erreur informe que
l'e-mail existe déjà
Ce que je veux, c'est que si l ' e-mail existe déjà et provient du même utilisateur, je n'ai pas besoin d'indiquer que l'e-mail existe déjà.
Je ne sais pas quel est le problème dans mon code.
5 Réponses :
Vous pouvez utiliser
$id = $request->route('user')
L'ID doit être remplacé par le nom de la colonne de clé primaire de la table que vous utilisez pour la vérification unique. Le {$ id} doit être défini avant le tableau $ rules comme:
'email' => "required|email|unique:users,email,{$id},id",
Corrigez-moi si je me trompe, mais je pense que la dernière valeur (c'est-à-dire id ) n'est pas requise laravel.com/docs/4.2/validation#rule-unique
Les deux derniers seront utilisés pour 'unique sauf $ id de la colonne id' (lors de la mise à jour)
Oui, mais l'avant-dernier ( $ id ) est la spécification de l'identifiant et laravel regardera par défaut la colonne id , donc le dernier n'est pas obligatoire ici
Absolument! Je l'ai inclus parce que le propriétaire de la question a inclus $ this> get ('example_id'). ', Example_id'
Ah oui j'ai raté ça :) nvm alors
'email' => "obligatoire | unique: tab_example, email,". $ this-> route ('id_exampl e'). ", id_example" est correct?
Essayez ceci
'email' => Rule::unique('users')->ignore($user->id, 'user_id');
Lire sous la section Forcer une règle unique à ignorer un champ donné
Parfois, vous souhaiterez peut-être ignorer un identifiant donné lors de la vérification unique.
Par exemple, envisagez un écran "Mettre à jour le profil" qui inclut le nom d'utilisateur, l'adresse e-mail et l'emplacement. Bien sûr, vous voudrez vérifier que l'adresse e-mail est unique.
Cependant, si l'utilisateur ne modifie que le champ du nom et non le champ de l'e-mail, vous ne voulez pas qu'une erreur de validation soit générée car l'utilisateur est déjà le propriétaire de l'adresse e-mail.
vous pouvez utiliser comme:
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
Utilisez simplement
$rules = [
'email'=> 'required|regex:/^.+@.+$/i|unique:tab_example,email,'.$this->route('example_id').',example_id'
];
return $rules;
au lieu de
$this>get('example_id')
Et si vous utilisez la ressource route, utilisez $ this-> route ('utilisateur' ).
$this->route('example_id')
J'ai fait ça, mais ça me renvoie quand même le même problème, ça dit que l'email existe déjà ...
quel est votre nom de paramètre? et avez-vous utilisé la route des ressources?
public function rules () {$ rules = ['email' => "obligatoire | unique: tab_example, email,". $ this-> route ('example_i d'). ", example_id"]; return $ rules; }
Je ne parle pas de votre fonction de règles. Je parle de votre itinéraire. pouvez-vous donner votre itinéraire pertinent?
mon problème est d'obtenir l'identifiant de l'utilisateur, je ne sais pas si je me trompe, mais j'ai réalisé cela, je pense que le problème pourrait être avec route (). Mes itinéraires: $ this-> post ('/ admin / médecins / save / {id?}', 'MedicosController @ save') -> nom ('docteurs'); $ this> any ('/ admin / docteurs / {action?} / {id?}', 'MedicosController @ action') -> nom ('médecins');
Votre validation me semble bonne. Si vous mettez à jour votre code comme je l'ai suggéré. Je l'utilise dans mon projet et cela fonctionne très bien. Merci
J'ai résolu le problème. Je viens de recevoir l'identifiant comme ceci: 'med_email' => Rule :: unique ('tab_medicos') -> ignore (request () -> route ('id'), 'med_id'), Merci ami, merci pour l'aide .
Essayez par ici
$rules = [
'email'=> ['required', 'email', \Illuminate\Validation\Rule::unique('tab_example', 'email')->whereNot('example_id',$this->get('example_id'))]
];
du même utilisateur comment?
où implémentez-vous ce code? dans le contrôleur?
il y a un enregistrement d'utilisateur, lorsque vous ouvrez son enregistrement et envoyez ce même enregistrement si l'e-mail n'est pas échangé, l'e-mail reste lié à cet utilisateur, c'est-à-dire que vous n'avez pas besoin de montrer que cet e-mail déjà est utilisé car il s'agit du même utilisateur.
J'ai créé une demande