2012-02-07 15 views
6

मेरे पास असेंबली से कंपोनेंट स्लॉट से संबंध है। यह एक बहुत ही रिश्ते है।सिद्धांत/Symfony2 OneToMany विदेशी_आईडी बचत NULL

// Assembly 

/** 
* @ORM\OneToMany(targetEntity="ComponentSlot", mappedBy="assembly", cascade={"persist"}) 
* @Assert\Valid 
*/ 
protected $componentSlots; 

// ComponentSlot 

/** 
* @ORM\ManyToOne(targetEntity="Assembly", inversedBy="componentSlots") 
*/ 
protected $assembly; 

डेटाबेस में जेनरेट की गई स्कीमा बिल्कुल ठीक है। सही कॉलम, सही सूचकांक और संबंध।

सिम्फनी 2 फॉर्म असेंबली टाइप में कंपोनेंटस्लॉट टाइप का संग्रह है। मैं एकाधिक घटक स्लॉट बच्चों को जोड़ने में सक्षम हूं। जारी रखने पर, असेंबली और घटक स्लॉट बच्चे सभी पूरी तरह से अच्छी तरह से सहेजे जाते हैं, सिवाय इसके कि assembly_id घटक स्लॉट तालिका में न्यूल है।

मैंने पिछले प्रोजेक्ट पर सेटअप की प्रतिलिपि बनाई है जो रिश्तों को ठीक से बचाता है, मैं पूरी तरह से स्टंप हूं। कैस्केड जारी है घटक पर सेट किया गया है विधानसभा के स्लॉट फ़ील्ड और वनटॉनी के साथ मेरा पिछला अनुभव यह है कि मुझे यहां कुछ खास करने की ज़रूरत नहीं है, इसकी देखभाल की जानी चाहिए।

किसी भी पॉइंटर्स की सराहना की जाएगी :)

+0

आप रिश्ते को कैसे स्थापित करते हैं? आप किस तरीके से कॉल करते हैं? – greg0ire

+0

जैसा कि मैंने कहा है, मेरे पास एक प्रोजेक्ट है जो पहले से ही एक स्पष्ट (स्पष्ट रूप से नहीं)) में स्थापित OneToMany रिश्तों के साथ काम करता है। उस प्रोजेक्ट में माता-पिता के पास 'ऐडलिंक (लिंक $ लिंक) है और यह केवल' $ this-> लिंक [] = $ link' कहता है। दरअसल, http://symfony.com/doc/2.0/book/doctrine.html पर प्रलेखन पुष्टि करता है कि अभिभावक और बाल संग्रह आइटम को लिंक करना स्वचालित है। यह स्वचालित होना चाहिए, मेरी पिछली परियोजना, प्रलेखन, और तथ्य यह है कि सिद्धांत: उत्पन्न: संस्थाएं यह नहीं स्थापित करती हैं कि ऑटो-जेनरेट विधि में संबंध यह सुझाव देता है कि मेरा मॉडल ठीक है और कुछ और – PorridgeBear

+0

मुझे लगता है कि मेरे पास यह लगभग था - संग्रह फ़ॉर्म फ़ील्ड में by_reference को गलत पर सेट करने के बजाए छोड़ा गया था। इसने बच्चों के लिए आईडी को संग्रहीत नहीं किया है। – PorridgeBear

उत्तर

4

अपने पिछले सेटअप की जांच करें। मुझे संदेह है कि आपके पास कुछ ऐसा था:

// Assembly 
public function addComponentSlot($componentSlot) 
{ 
    $this->componentSlots[] = $componentSlot; 

    $componentSlot->setAssembly($this); // Probably left this out when you copied? 
} 
+0

नहीं, यह जोड़ना कुछ भी नहीं बदलता है। मैंने 'setComponentSlots' पर भी यह कोशिश की जो सिम्फनी 2 अनुरोध पर उपयोग करता है-> बाइंडरवेस्ट ऑब्जेक्ट्स सेट अप करने के लिए और यह भी काम नहीं करता है। – PorridgeBear

संबंधित मुद्दे