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:
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 !
Finalement c'est bon !! j'avais juste pas mis la bonne relation pour la base de données, j'avais mis OneToOne alors qu'il fallait mettre ManyToOne