1

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

4

2 に答える 2

0

最終的な解決策には、多少の回避策が必要です。$newABC、$someXYZ、およびいくつかの参照情報を、PROTECTED へのリダイレクトを介して取得します。同じコントローラーで機能します。(保護されていない場合は、URLで呼び出すことができます)

永続化マネージャはすでに $newABC を永続化しています。そこで、簡単に $someXYZ を追加して、最終的に行きたい場所への参照とともにリダイレクトすることができます。

終わり。

于 2014-09-03T12:16:10.043 に答える
0

コレクションはオブジェクトの配列であるため、おそらくオブジェクトなしエラーが返されます。

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