如何添加新对象的集合?

时间:2014-07-07 12:18:10

标签: symfony orm doctrine-orm extbase typo3-flow

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

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()之前,xyz集合不存在于abc控制器中。但是,如何在addAction()完​​成之前添加到此集合中?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

最终的解决方案需要一点点工作: 我把$ newABC,$ someXYZ和一些参考资料通过重定向到PROTECTED!功能在同一个控制器中。 (如果不受保护,你可以用url调用它)

持久性管理器已经持久化了$ newABC。所以我可以轻松地添加$ someXYZ并最终重定向它,并引用我想去的地方。

完成。