symfony2 アプリケーションのコーディング中に、ここで問題に直面しています。
状況: エンティティ "A" のコピーを作成し、その属性 "foo" を変更したいと考えています。ただし、A と Foo は OneToOne の関係で関連付けられているため、エラーが発生します。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '9' for key
UNIQ_41A6A445D7FA9592
私のエンティティは次のとおりです。
/**
* AcmeBundle\Entity\A
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="AcmeBundle\Entity\ARepository")
*/
class A
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToOne(targetEntity="Mvcc\AcmeBundle\Entity\Foo")
*
*/
protected foo;
getFoo(){
return $this->foo;
}
setFoo($foo){
$this->foo = $foo;
return $this;
}
}
問題:コントローラーで次のことを行います。
/*start*/
/*1) I create a clone aBis of a, instance of A.its foo attribute is connected to foo1.*/
$aBis = clone($a);
/*2) I modify the attribute foo for a */
$foo2 = new Foo();
$a->setFoo($foo2);
$em->persist($foo2)
$em->persist($aBis);
$em->persist($a);
$em->flush();
/*end*/
フラッシュに関しては、ある時点で「a」と「aBis」の両方が属性 foo1 を持っているという事実により、doctrine が続行できず、$a がその属性を新しい foo に変更したことを確認できないと思います。これを解決する方法はありますか?
私の実際の問題はもう少し複雑です (より深い関係と作業単位が関係しています)。ただし、ここで主な問題を要約したと思います。
よろしくお願いします!
よろしく、