11

多対多の自己参照関係を永続化する際に問題が発生しました。エラーが表示されます:

クラス 'Doctrine\ORM\Persisters\ManyToManyPersister' はチェーン構成された名前空間で見つかりませんでした

これは、保存されているすべての子フォーム項目を削除すると発生します。少なくとも 1 つ残しておいても、エラーは発生しません。また、最初にエンティティを子なしで保存すると、すべて正常に動作します。

/**
  * 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" => false

4

1 に答える 1

2

たとえば、MergeDoctrineCollectionListener.onBind()からメソッドUnitOfWork.scheduleCollectionDeletionが呼び出され、PersistentCollectionオブジェクトが複製された ( 'by_reference' = false )場合に問題が発生することがわかりました。

この問題を簡単に解決するには、MergeDoctrineCollectionListenerクラスの次の行にコメントを付けます。

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