私はそれらの機能(アタッチ/マージ機能)に苦労してきました。
私の必要性は単純です、私はオブジェクト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
います。
ありがとう