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() が完了する前に、どうすればこのコレクションに追加できますか?