我一直在使用这些功能(attach/merge feature)。
我的需求很简单,我有一个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
。
由于
答案 0 :(得分:3)