2 votes

La validation de Laravel ne fonctionne pas correctement

J'ai une situation où le champ de nom doit être unique mais la règle s'applique uniquement lorsque la valeur du groupe correspond au groupe précédemment ajouté dans la base de données. Il y a une entrée pour le groupe et d'autres entrées pour le nom qui peuvent être ajoutées dynamiquement par l'utilisateur mais pour simplifier, j'ai ajouté 2 entrées avec l'attribut name[] ci-dessous. Si la 1ère entrée de nom (la 2ème entrée de nom n'est pas utilisée) est envoyée à la validation, cela fonctionne, cependant lorsque les valeurs des deux entrées sont envoyées, la validation ne fonctionne pas. Comment puis-je résoudre ce problème. Merci d'avance.

$request->validate([
    'group' => 'required',
    'name' => [
        'required', Rule::unique('group_tbl')->where(function ($query) use ($request){
            $query->where('group', $request->get('group')); 
        })
    ]
]);

entrées de formulaire:

Par exemple, il y a un groupe "G" et un nom "A" ajouté dans une base de données. Maintenant, si le groupe "G" et le nom "A" sont soumis, il affiche une erreur de validation "Le nom est déjà pris". Cependant, si le groupe "G", le nom "A" et un autre nom "B" sont soumis, il n'y a pas d'erreur. Cela ne devrait pas être enregistré car le nom "A" sous le groupe "G" est déjà stocké dans la base de données.

base de données:

id

groupe

nom

1

G

A

0voto

Vous pouvez utiliser :

$request->validate([
    'group' => 'required',
    'name.*' => [
        'required', Rule::unique('group_tbl', 'name')->where(function ($query) use ($request){
            $query->where('group', $request->get('group'));
        })
    ]
]);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X