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"}: 在joinColumnsOR上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

谢谢

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 回答