我在坚持多对多自引用关系方面遇到了问题。我收到错误:
在链配置的命名空间中找不到类"Doctrine\ORM\Persisters\ManyToManyPersister"
当我删除与它们一起保存的所有子窗体项目时,就会发生这种情况。至少留下一个不会出错。此外,如果我最初保存的实体没有子级,一切都很好。
/**
* WestAlbumBundleEntityAlbum
*
* @ORMTable(name="albums")
* @ORMEntity(repositoryClass="WestAlbumBundleEntityAlbumRepository")
* @ORMHasLifecycleCallbacks
*/
class Album extends Entity implements CrudEntity
{
/**
* @ORMManyToMany(targetEntity="Album")
* @ORMJoinTable(name="albums_relations",
* joinColumns={@ORMJoinColumn(name="album_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(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();