Bonjour à tous,

Voila j'ai deux entités, l'une s'appelle Page et l'autre Media, relier par une relation ManyToMany.
Mon programme est une interface multilingue, mais là n'est pas là le problème. Pour satisfaire cette demande, je clone mes objets, à l'aide clone de php pour garder toutes les informations qui necessite pas de traduction, comme les média. Ce que j'aimerai c'est que mon objet original et son clone pointe vers la même entité Media, sans créer un clone de ce dernier.

Mon soucis c'est que j'ai cette erreur lorsque j'essaie d'inserer mon clone dans la base de donnée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 [Doctrine\DBAL\DBALException]
  An exception occurred while executing 'INSERT INTO page_diapo (page_id, med
  ia_id) VALUES (?, ?)' with params [46, 1]:
 
  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '46-1
  ' for key 'PRIMARY'
 
  [PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '46-1
  ' for key 'PRIMARY'
J'ai découvert que mon entité original était déjà dans la base de donnée, normale, ainsi que l'objet media relatif à l'entité original. Cependant, l'objet cloné elle ne se trouve pas dans la base de donnée.

Comment faire?

Voici mon code:

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
 
/**
     * @ORM\ManyToMany(targetEntity="Application\Sonata\MediaBundle\Entity\Media", inversedBy="diaporama", cascade={"all"})
     * @ORM\JoinTable(name="page_diapo")
     */
    private $diapo;
....
public function __clone()
    {
       ....
        $this->createdAt = new \DateTime('now');
        $this->updateAt = new \DateTime('now');
        foreach ($this->diapo as $item)
        {
            $this->addDiapo($item);
            $this->diapo->setOwner($this, $this->diapo->getMapping());
        }
    }
Par avance, je vous en remercie