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);
}
}
Для 1) вам все равно придется извлекать ваши объекты, ваш код не сможет волшебным образом узнать, какие объекты назначаются вашему новому B-объекту.
С класса В, определенной выше, вы можете написать
$b = new BObject();
$b
->addA($a1)
->addA($a2)
->addA(new AObject());
$entityManager->persist($b);
$entityManager->flush();
и А объекты будут иметь ссылку на Б.
Для 2) это еще лучшее решение, справиться с уровнем базы данных ,
Просто отформатирован для ясности –