3

私はそれらの機能(アタッチ/マージ機能)に苦労してきました。

私の必要性は単純です、私はオブジェクトBookFilterTypeのコレクションをフィルタリングするものを持っていBookます。

今まで、

public function indexAction()
{
    $book = new Book($this->getUser());
    $filters = $this->getFilters();
    $form = $this->createForm(new BookFilterType(), $filters);

    ...
    return array(...);
}

エラーが発生しました:Entities passed to the choice field must be managedフィルターでは他のエンティティであったためです。

したがって、基本的に、セッションでフィルター基準を保存するときにIDのみを保存し、を使用してそれらを再水和する必要がありましたfind($id)

しかし、これは醜く、私のコードは読めなくなります!

だから私はこのdetach / merge機能を使うことにしました。

デタッチされたエンティティを保存した後、それらを再度マージしてフォームに値を再挿入したいのですが、次のようになるcascade={"merge"}ため、オブジェクトで使用する必要があるようです。

Class Doctrine\Common\Collections\ArrayCollection is not a valid entity or mapped super class.

質問(ついに)

cascade={"merge"}どこに:を置くのですjoinColumnsinverseJoinColumns?または両方 ??ManyToMany原因私はそれらのフィルターに関連付けしかありません

/**
 * @ORM\ManyToMany(targetEntity="MyTargetedEntity")
 * @ORM\JoinTable(name="target_entity_nn",
 *      joinColumns={@ORM\JoinColumn(name="some_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="other_id", referencedColumnName="id")}
 *      )
 *
 **/
private $contributors;

PS:私はSymfony2.1/を使用してDoctrine masterいます。

ありがとう

4

1 に答える 1

3

@ ORM\ManyToManyに置くことができます

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/annotations-reference.html#manytomany

于 2012-05-02T14:19:14.053 に答える