use Doctrine\ORM\Mapping as ORM;
class AObject
{
// ...
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\BObject", inversedBy="a", onDelete="SET NULL")
*/
private $b;
}
class BObject
{
// ...
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\AObject", mappedBy="b", cascade={"persist"})
*/
private $a;
public function __construct()
{
$this->a = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @return \Doctrine\Common\Collections\ArrayCollection
*/
public getA()
{
return $this->a;
}
/**
* @param \Doctrine\Common\Collections\ArrayCollection $a
*/
public setA($a)
{
$this->a = $a;
}
/**
* @param AObject $a
* @return BObject
*/
public addA($a)
{
$this->a[] = $a;
$a->setB($this); // assign B object to A
return $this; // For method chaining
}
/**
* @param AObject $a
*/
public removeA($a)
{
$this->a->removeElement($a);
}
}
あなたはまだオブジェクトをフェッチする必要がありますが、あなたのコードは、どのAオブジェクトが新しいBオブジェクトに割り当てるか魔法のようには知ることができません。
上で定義したクラスBを使用すると、
$b = new BObject();
$b
->addA($a1)
->addA($a2)
->addA(new AObject());
$entityManager->persist($b);
$entityManager->flush();
を書くことができますし、オブジェクトが2の場合B.
への参照を持つことになります)、それはまだ、より良い解決策だ、データベースのレベルにそれを扱います。
明瞭にするために再フォーマットしました。 –