私はそれらの機能(アタッチ/マージ機能)に苦労してきました。
私の必要性は単純です、私はオブジェクト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"}どこに:を置くのですjoinColumnsかinverseJoinColumns?または両方 ??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います。
ありがとう