2012-08-22 17 views
11

Ich habe Probleme mit dem Fortbestehen vieler zu vielen sich selbst referenzierenden Beziehungen. Ich erhalte Fehler:Doctrine2 ManyToMany Selbstreferenzierung

The class 'Doctrine\ORM\Persisters\ManyToManyPersister' was not found in the chain configured namespaces

Dies geschieht, wenn ich alle mit ihnen geretteten Kinder Formularelement entfernen. Mindestens einen Fehler machen keinen Fehler passieren. Auch wenn ich zuerst Entity ohne Kinder speichern, funktioniert alles gut.

/** 
    * 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; 
} 

Wenn Sie mit Symfony2 Formen zu testen sind erinnern

"by_reference" => false

+0

das gleiche Problem. Hast du Glück dabei? –

+0

Siehe unten URL Ich denke, es ist sehr hilfreich für Sie. ** Brauchen Sie Hilfe, Doctrine zu verstehen vielen zu viele selbst referenzierenden Code ** http://stackoverflow.com/questions/3290319/need-help-understanding-doctrine-many-to-many-self-referencing-code –

+0

wo ist Ihre Lehre eingebettet in? Symfonie? welche Version? –

Antwort

2

ich gefunden habe, zu setzen, dass das Problem tritt auf, wenn die Methode UnitOfWork.scheduleCollectionDeletion genannt wird, zum Beispiel von MergeDoctrineCollectionListener .onBind() und PersistentCollection Objekt wurde geklont ('by_reference' = false)

Eine schnelle Lösung für dieses Problem ist die folgende Zeile in der MergeDoctrineCollectionListener Klasse Kommentar:

//$collection->clear(); 
+1

Sollte nicht auskommentieren, da es Sie in Zukunft davon abhält Erhalten von Updates über Composer. Wenn du das ordentlich machen wolltest, könntest du Doctrines Repo forkieren, die Änderung und deine Gabel machen. Auf diese Weise können Sie eine Abzweigung von Doctrine beibehalten und trotzdem in der Lage sein, Doctrine zu verwenden, um mit der neuesten Codebasis auf dem neuesten Stand zu bleiben. Das Auskommentieren dieser Linie könnte andere unvorhergesehene Änderungen in Doctrines Verhalten haben, so dass ich es bestenfalls als experimentell behandeln würde. – Bendihossan

Verwandte Themen