Doctrine2许多自我参考


Doctrine2 ManyToMany Self referencing

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

在链配置的命名空间中找不到类"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"=>错误

我发现,当从MergeDoctrineCollectionListener.onBind()调用方法UnitOfWork.scheduleCollectionDelegation并且PersistentCollection对象已克隆('by_reference'=false)时,就会出现问题

这个问题的快速解决方案是在MergeDoctrineCollectionListener类中注释以下行:

//$collection->clear();