Bonjour,
Voila je rencontre un petit problème avec mon code. Je travaille avec Symfony et fais mes enregistrements avec Doctrine.
Dans mon programme, je propose à un utilisateur de remplire une fiche. Cette fiche s'enregistrera dans la table prévue à cet effet. La table de la fiche et la table de l'utilisateur sont liées grâce à une clef étrangère (user_id) présente dans la table de la fiche. Cependant, j'aimerai aussi que l'uilisateur qui crée la fiche puisse renseigner d'autres utilisateurs sur la fiche et que ceux-ci soient également "reliés" à la fiche. Pour cela j'ai fait une nouvelle base (identifiant) avec deux clefs étragère: fiche_id et user_id. L'utilisateur a la possibilité de cocher plusieurs utilisateurs à renseigner. Pour cela j'ai fais la boucle foreach qui récupère toutes les valeurs de mes checkBox
Voici la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public function creationFicheNC (Request $request, ObjectManager $manager){ $ficheNC= new FicheNC(); $utilisateur=$this->getUser(); // $form=$this->get('form.factory')->create(ficheNCType::class, $ficheNC); $listeUsers = $this ->getDoctrine() ->getRepository(User::class) ->findBy([ 'rolesString'=>['User2','Admin']]); if ($request->isMethod('POST')) { $titre=$request->request->get('titre'); $categorie=$request->request->get('categorie'); $ficheNC->setTitre($titre); if($categorie=='PourInfo'){ $ficheNC->setCategorie('Pour Information'); }elseif ($categorie=='Mineure'){ $ficheNC->setCategorie('Mineure'); }elseif ($categorie=='Majeure'){ $ficheNC->setCategorie('Majeure'); } $ficheNC->setUser($utilisateur); // $form->handleRequest($request); $manager = $this->getDoctrine()->getManager(); $ficheNC->setDate(date('d-m-Y')); //if($form->isSubmitted() && $form->isValid()){ $manager->persist($ficheNC); foreach( $request->request->get('listUser') as $chkbx){ $identifiant=new Identifiants(); $utilisateur=$this->getDoctrine()->getRepository(User::class)->find($chkbx); $identifiant->setUserFiche($utilisateur); $identifiant->setFicheNCUser($ficheNC); $manager->persist($identifiant); $manager->flush(); } $manager->flush(); return new Response('Saved new ficheNC with id '.$ficheNC->getId()); // } //return new Response('le titre est: '.$ficheNC->getTitre().' la categorie est:'.$ficheNC->getCategorie()); } return $this->render('listUser2FicheNC.html.twig', array( 'currentController' => 'User', 'currentPage' => 'account', 'listeUsers' => $listeUsers, //'form' => $form->createView(), )); }
Pout chaque utilisateurs qui ont été séléctionnés, la fiche qui est crée et l'utilisateur selectionné sont attribué à la base identifiant.
J'aimerai qu'à chaque utilisateur cochés une nouvelle ligne (un nouvel "identifiant" dans la bas identifiant) soit crée.
Je reçois l'erreur suivante:
Ici l'identifiant de ma fiche est 10 et les identifiants de mes utilisateurs sont 5 et 1An exception occurred while executing 'INSERT INTO identifiants (user_id, fiche_nc_id) VALUES (?, ?)' with params [5, 10]:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '5' for key 'UNIQ_B27B6551A76ED395'
Lorsque je veux ajouter les identifants 1 et 2 cela ne prend en compte que l'identifiant 2.
Il remarque qu'il y a une "Duplicate entry", comment faire pour qu'il ne me mette pas d'erreur et qu'il enregistre le nouvel "identifiant" de la base à chaque tour du for ?
Merci pour vos réponses !
Partager