我在坚持多对多自引用关系方面遇到了问题。我收到错误:
在链配置的命名空间中找不到类"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();