Doctrine2 ManyToMany Самостоятельные ссылки
У меня возникают проблемы с сохранением многих многих отношений, связанных со ссылками.
Я получаю сообщение об ошибке:
Класс "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" = > false
Ответы
Ответ 1
Я обнаружил, что проблема возникает, когда вызывается метод UnitOfWork.scheduleCollectionDeletion, например, из MergeDoctrineCollectionListener.onBind(), и объект PersistentCollection был клонирован ('by_reference' = false)
Быстрое исправление этой проблемы - прокомментировать следующую строку в классе MergeDoctrineCollectionListener:
//$collection->clear();