Relation ManyToMany : Duplicate entry
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 :
Code:
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;
}
} |
et mon entité category :
Code:
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(),
)); |
Mon problème est que lors que je valide mon fomulaire, j'ai l' erreur
Code:
1 2
|
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-1' for key 'PRIMARY' |
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.
Si quelqu'un aurai une idée je vous remercie d'avance :)