11

我在坚持多对多自引用关系时遇到了问题。我收到错误:

在链配置的命名空间中找不到类“Doctrine\ORM\Persisters\ManyToManyPersister”

当我删除与他们一起保存的所有子表单项时,就会发生这种情况。至少留下一个不会导致错误发生。此外,如果我最初保存没有孩子的实体,一切正常。

/**
  * West\AlbumBundle\Entity\Album
  *
  * @ORM\Table(name="albums")
  * @ORM\Entity(repositoryClass="West\AlbumBundle\Entity\AlbumRepository")
  * @ORM\HasLifecycleCallbacks
  */
 class Album extends Entity implements CrudEntity
 {

     /**
      * @ORM\ManyToMany(targetEntity="Album")
      * @ORM\JoinTable(name="albums_relations",
      *         joinColumns={@ORM\JoinColumn(name="album_id", referencedColumnName="id")},
      *         inverseJoinColumns={@ORM\JoinColumn(name="related_album_id", referencedColumnName="id")}
      * ) 
      * @var ArrayCollection
      */
      protected $related_albums;
}

如果您使用 Symfony2 表单进行测试,请记住设置

“by_reference” => 假

4

1 回答 1

2

我发现问题发生在UnitOfWork.scheduleCollectionDeletion被调用时,例如,从MergeDoctrineCollectionListener.onBind()并且PersistentCollection对象已被克隆('by_reference' = false)

快速解决此问题的方法是在MergeDoctrineCollectionListener类中注释以下行:

//$collection->clear();
于 2012-11-07T19:02:15.000 回答