微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Symfony:PropertyAccessor问题

如何解决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 举报,一经查实,本站将立刻删除。