我通过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()完成之前添加到此集合中?
答案 0 :(得分:0)
它可能返回无对象错误,因为集合是对象数组。
public function addXYZ([..]\Domain\Model\Xyz $xyz) {
$this->xyzs[] = $xyz;
}
答案 1 :(得分:0)
最终的解决方案需要一点点工作: 我把$ newABC,$ someXYZ和一些参考资料通过重定向到PROTECTED!功能在同一个控制器中。 (如果不受保护,你可以用url调用它)
持久性管理器已经持久化了$ newABC。所以我可以轻松地添加$ someXYZ并最终重定向它,并引用我想去的地方。
完成。