我有一个双向的多对一关系。我们来用Foo
和Bar
。 Foo
有以下几点:Doctrine 2 ArrayCollections - 我错过了什么?
class Foo
{
/**
* @ORM\OneToMany(targetEntity="Bar", mappedBy="foo", cascade={"all"}, orphanRemoval=true)
*/
private $bars;
public function __construct()
{
$this->bars = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @param mixed $bars
*/
public function setBars($bars)
{
$this->bars = $bars;
}
/**
* @param Bar $bar
*/
public function addBar(Bar $bar)
{
$this->bars->add($bar);
}
/**
* @return mixed
*/
public function getBars()
{
return $this->bars;
}
}
而且Bar
:
class Bar
{
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="Foo", inversedBy="bars")
* @ORM\JoinColumn(name="foo_id", referencedColumnName="id", nullable=false)
*/
protected $foo;
/**
* @param Foo $foo
*/
public function setFoo(Foo $foo)
{
$this->foo = $foo;
}
/**
* @return Foo
*/
public function getFoo()
{
return $this->foo;
}
}
好了,上面的班,当我写:
$foo = new Foo();
$bar1 = new Bar();
$bar2 = new Bar();
$foo->addBar($bar1);
$foo->addBar($bar2);
并尝试坚持,我得到一个错误关于每个Bar
的foo属性如何为空:
同样,如果我周围扳起:
$foo = new Foo();
$bar1 = new Bar();
$bar2 = new Bar();
$bar1->setFoo($foo);
$bar2->setFoo($foo);
我能坚持,但后来我Foo
新近产生PersistentCollection
该属性是空的:
这是有意的行为?我习惯了不同平台上的其他ORM在分配时接合双向关系,所以我不确定这对于Doctrine/PHP是否正常,或者我的注释混乱了(上面的错误消息让我相信)。
所以,任何帮助将不胜感激。
你试图坚持美孚你打电话之前setFoo? – Alex
没有变化。 'PersistentCollection'仍为空 –