如何解决Symfony:PropertyAccessor问题
我在propertyAccessor上遇到问题:以下是两个实体:
class Foo
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Bar",inversedBy="foo")
* @ORM\JoinColumn(nullable=false)
*/
private $bar;
public function getBar(): ?Bar
{
return $this->bar;
}
public function setBar(?Bar $bar): self
{
$this->bar = $bar;
return $this;
}
}
class Bar
{
/**
* @ORM\OnetoMany(targetEntity="App\Entity\Foo",mappedBy="bar",orphanRemoval=true,cascade="all")
*/
private $foo
public function __construct()
{
$this->foo = new ArrayCollection();
}
/**
* @return Collection|Foo[]
*/
public function getFoo(): Collection
{
return $this->foo;
}
public function addFoo(Foo $foo): self
{
if (!$this->foo->contains($foo)) {
$this->foo[] = $foo;
$foo->setBar($this);
}
return $this;
}
public function removeFoo(Foo $foo): self
{
if ($this->foo->contains($foo)) {
$this->foo->removeElement($foo);
// set the owning side to null (unless already changed)
if ($foo->getBar() === $this) {
$foo->setBar(null);
}
}
return $this;
}
}
我有很多集合,例如Foo,所以我使用属性访问器以编程方式访问它们。但是当我做一个:
$bar = new Bar();
$foo = new Foo();
$propertyAccessor->getValue($bar,'foo')->add($foo);
$foo->bar
保持为空。
这正常吗?
然后移除Orphean仍然有效吗?
感谢您的帮助
解决方法
是的,这是意料之中的。
$propertyAccessor->getValue($bar,'foo')
将返回一个 ArrayCollection
实例。并在集合上调用 add($foo)
,不会神奇地设置 $foo->bar
。我猜你在 addFoo()
上把它和 Bar
搞混了。
关于您的第二个问题:调用 $bar->removeFoo($anyFoo)
将触发删除数据库中的 $anyFoo
表示。
setValue
方法支持添加到集合。您应该直接为 $bar
调用此方法。
$propertyAccessor->setValue($bar,'foo',[$foo]);
有关详细信息,请参阅documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。