2012-08-22 17 views
11

मैं कई स्वयं को संदर्भित संबंधों के लिए कई बने के साथ समस्याओं मिला है। मैं प्राप्त त्रुटि:Doctrine2 ManyToMany स्व संदर्भित

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

यह तब होता है जब मैं उन लोगों के साथ बचाया सभी बच्चों प्रपत्र आइटम को हटा दें। कम से कम एक छोड़ने से त्रुटि नहीं होती है। इसके अलावा अगर मैं शुरुआत में किसी बच्चे के साथ इकाई को बचाता हूं तो सबकुछ ठीक काम करता है।

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

+0

एक ही समस्या मिल गया। इस पर कोई भाग्य? –

+0

नीचे यूआरएल देखें मुझे लगता है कि यह आपके लिए बहुत मददगार है। ** सिद्धांत कई स्वयं संदर्भित कोड के लिए कई समझने में सहायता चाहिए ** http://stackoverflow.com/questions/3290319/need-help-understanding-doctrine-many-to-many-self-referencing-code –

+0

जहां अपने सिद्धांत है इसमें समाहित? सिम्फोनी? कौन सा संस्करण? –

उत्तर

2

मैं पाया है कि समस्या है, जब विधि UnitOfWork.scheduleCollectionDeletion कहा जाता है होता है MergeDoctrineCollectionListener से उदाहरण के लिए, स्थापित करने के लिए याद .onBind() और PersistentCollection वस्तु क्लोन किया गया है ('by_reference' = false)

इस समस्या का एक त्वरित सुधार MergeDoctrineCollectionListener कक्षा में निम्नलिखित पंक्ति टिप्पणी करने के लिए है:

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

बाहर विक्रेता कोड टिप्पणी नहीं होना चाहिए के रूप में यह भविष्य में आप कर पाएगा संगीतकार के माध्यम से अद्यतन प्राप्त करने से। यदि आप इसे अच्छी तरह से करना चाहते हैं तो आप डॉक्टर के रेपो को फोर्क कर सकते हैं, बदलाव और अपना कांटा बना सकते हैं। इस तरह आप सिद्धांत का एक कांटा को बनाए रखने और अभी भी कर सकता सिद्धांत से नदी के ऊपर खींचने के लिए नवीनतम codebase के साथ तारीख तक रखने के लिए सक्षम हो। इस पंक्ति में टिप्पणी करते हुए कि डॉक्टर के व्यवहार में अन्य असुरक्षित परिवर्तन हो सकते हैं, इसलिए मैं इसे सबसे अच्छा प्रयोगात्मक के रूप में मानता हूं। – Bendihossan