Doctrine2 ManyToMany自我引用

时间:2012-08-22 16:02:53

标签: php doctrine-orm many-to-many

我遇到了许多自我引用关系的问题。 我收到错误:

  

在链配置的命名空间中找不到类'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”=>假

1 个答案:

答案 0 :(得分:2)

我发现当调用方法 UnitOfWork.scheduleCollectionDeletion 时会发生问题,例如,来自 MergeDoctrineCollectionListener.onBind() PersistentCollection < / em>对象已被克隆('by_reference'= false)

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

//$collection->clear();