Bonjour à tous,
Voilà je suis en ce moment en train de développer mon petit blog pour prendre en main Symfony2. Dans mon BlogBundle, j'ai 2 entités Article et Category.
Je souhaite faire une relation ManyToMany entre les deux entiés car un article peut avoir plusieurs categorie.
J'ai donc mes entité ecrite de la manière suivante :
et mon entité category :
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 class Article { ..... public function __construct() { $this->setDateCreation(new \DateTime()); $this->setDateModification(new \DateTime()); $this->categorie = new \Doctrine\Common\Collections\ArrayCollection; } /** * @ORM\ManyToMany(targetEntity="Category", mappedBy="article") * @ORM\JoinTable(name="article_category") */ private $categorie; // On définit le getter et le setter associé. public function getCategorie() { return $this->categorie; } // Ici, on force le type de l'argument à être une instance de notre entité Client. public function setCategorie(Category $categorie) { $categorie->setArticle($this); $this->categorie[] = $categorie; } }
Mon problème est que lors que je valide mon fomulaire, j'ai l' erreur
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
62
63
64
65
66
67
68 class Category { .... /** * @ORM\ManyToMany(targetEntity="Article", inversedBy="categorie")) * @ORM\JoinTable(name="article_category") */ private $article; // On définit le getter et le setter associé. public function getArticle() { return $this->article; } // Ici, on force le type de l'argument à être une instance de notre entité Client. public function setArticle(Article $article) { $this->article[] = $article; } public function __construct() { $this->article = new \Doctrine\Common\Collections\ArrayCollection; } } </code> Et dans mon controlleur voici ce que je fait : <code type="php"> $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('LFABlogBundle:Article')->find($id); $editForm = $this->createForm(new ArticleType(), $entity); $deleteForm = $this->createDeleteForm($id); $request = $this->getRequest(); $editForm->bindRequest($request); if ($editForm->isValid()) { $formulaire = $request->request->get('lfa_blogbundle_articletype'); $user = $this->get('security.context')->getToken()->getUser(); $entity->setAuteur($user->getUsername()); $entity->setSlug($this->generate_slug($entity->getTitre())); $entity->setContenuCache($entity->getContenu()); $selectedCategories = $formulaire['categorie']; foreach ($selectedCategories as $categorie) { $category = $em->getRepository('LFABlogBundle:Category')->find($categorie); $entity->setCategorie($category); } $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('article_index')); } return $this->render('LFABlogBundle:Backoffice:edit.html.twig', array( 'entity' => $entity, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), ));
J'arrive pas a voir d'ou proviens mon erreur j'ai bien remis a jours ma base, regarder la documentation de Doctrine 2 je ne voit pas. Si par exemple je supprime de la base la table de liaison et que je la recréée via la commande. L'erreur apparait même lorsqu'elle est vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-1' for key 'PRIMARY'
Si quelqu'un aurai une idée je vous remercie d'avance![]()
Partager