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:

An 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'
Ici l'identifiant de ma fiche est 10 et les identifiants de mes utilisateurs sont 5 et 1
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 !