1

我通过 Typo3 Flow 中的集合获得了一个与另一个对象具有多对多关系的对象。创建该对象的新实例(已成功添加到存储库)后,我可以简单地添加到此集合中。

abc模型的代码片段:

/**
* @var \Doctrine\Common\Collections\Collection<[..]\Domain\Model\Xyz>
* @ORM\ManyToMany(targetEntity="[..]\Domain\Model\Xyz")
*/
protected $xyzs;

[...]

public function getXYZs() {
    return $this->xyzs;
}

public function addXYZ([..]\Domain\Model\Xyz $xyz) {
    if(!$this->xyzs->contains($xyz))
        $this->xyzs->add($xyz);
}

public function removeXYZ([..]\Domain\Model\Xyz $xyz) {
    if($this->xyzs->contains($xyz))
        $this->xyzs->removeElement($xyz);
}

问题是在将其添加到存储库之前,我无法将其添加到此集合中。(发生这种情况是因为我猜不存在外键)。

abc 控制器的代码片段(不起作用!):

public function addAction([...]\$newABC)
{
    [...]

    $this->abcRepository->add($newABC);
    //the line below returns "can't use contains() / add() on a non-object"
    $newABC->addXYZ($someXYZ);

    [...]
}

在 addAction() 完全完成之前,abc 控制器中不存在 xyz 集合。但是如何在 addAction() 完成之前添加到这个集合中呢?

4

2 回答 2

0

它可能会返回无对象错误,因为集合是对象数组。

public function addXYZ([..]\Domain\Model\Xyz $xyz) {
        $this->xyzs[] = $xyz;
}
于 2014-07-07T13:16:43.770 回答
0

最终的解决方案需要做一些工作:我通过重定向到受保护的地方来获取 $newABC、$someXYZ 和一些参考资料!在同一个控制器中运行。(如果不受保护,您可以使用 url 调用它)

在那里,持久性管理器已经持久化了 $newABC。因此,我可以轻松地添加 $someXYZ 并最终将其重定向到我喜欢去的地方。

完毕。

于 2014-09-03T12:16:10.043 回答