Friday 15 August 2014

symfony - Symfony2 Doctrine2 Array Collection OneToMany doesn't add item -


मुझे सरणी संग्रह में समस्या है।

अगर मैं "$ livraison- & gt; ; setChoix ($ livraison- & gt; getChoix ()); " वैध रूप में, आइटम संबंध में नहीं बचा है और इसके साथ, संग्रह में आइटम किसी भी रूप में डुप्लिकेट के रूप में बचाता है।

मेरे पास 2 संस्था, "लिवरॉन" और "लिवरॉन चेक्स" है

लिवरॉन का संबंध है लिवोरेन्सन चेओक्स लिविरसन चेओक्स के साथ OneToMany लिवारासन के साथ संबंध बहुत से लोग

यह लिवरॉन है:

  ... सिद्धांत का प्रयोग करें \ आम \ संग्रह \ ArrayCollection; सिद्धांत / ORM \ मैपिंग को ओआरएम के रूप में प्रयोग करें; Symfony \ Component \ Validator \ Constraints का उपयोग करें के रूप में; क्लास लिवरासन {... / ** * @ORM \ OneToMany (लक्ष्यइन्तिटी = "\ यूटीआर्मेंट बंडल \ इकाई" लिविरायन चेक्स ", मैप किए गए =" livraison ", cascade = {" all "}) ** / निजी $ choix; सार्वजनिक फ़ंक्शन __ रचना () {$ this- & gt; choix = नया ArrayCollection (); } सार्वजनिक फ़ंक्शन addChoix (\ YOU \ CommercantBundle \ Entity \ LivraisonChoix $ choix) {$ choix- & gt; सेट लाइवरीन ($ this); $ This- & gt; choix [] = $ विकल्प; } सार्वजनिक फ़ंक्शन सेटहोयक ($ विकल्प) {foreach ($ choix as $ choi) {$ this- & gt; जोड़चयन ($ चॉइ); }} सार्वजनिक फ़ंक्शन निकालनाक्लोक्स ($ choix) {$ this- & gt; choix- & gt; हटायेंएलेमेंट ($ choix); } सार्वजनिक समारोह getChoix () {वापसी $ this- & gt; choix; } ...   

यह लिवरॉन चेिक्स है:

  सिद्धांत या ORM के रूप में ORM मैपिंग का उपयोग करें; क्लास लिव्रेयनसंहिक्स {... / ** * @ORM \ ManyToOne (लक्ष्य ईंटिटी = "आप \ कमांडेंटबंडल \ इकाई" लिवरॉन ", इनवर्स्ड बाय =" चुक्स ") ** / निजी $ लाइब्रेसन; ... सार्वजनिक समारोह सेट लाइवरीन ($ livraison) {$ this- & gt; livraison = $ livraison; $ इस वापसी; } सार्वजनिक समारोह getLivraison () {वापसी $ इस-> livraison; } ...   

यह फ़ॉर्म बिल्डर है:

  सार्वजनिक फ़ंक्शन buildForm (फ़ॉर्मबिल्डरइंटरफेर $ निर्माता, सरणी $ विकल्प) {$ निर्माता - & gt; ('नाम') - & gt; जोड़ ('choix', 'संग्रह', सरणी ('प्रकार' = & gt; नया लिवरॉन चेक्स टाइप करें), 'allow_add' = & gt; सच है, 'allow_delete' = & gt; सच है,)); }   

और यह नियंत्रक है: <पूर्व> $ livraison = new livraison (); $ Form = $ this- & gt; createForm (नया लिवरॉन टाइप (), $ livraison); $ अनुरोध = $ this- & gt; प्राप्त करें ('अनुरोध'); अगर ($ request- & gt; getMethod () == 'POST') {$ form- & gt; बाँध ($ अनुरोध); यदि ($ form- & gt; isValid ()) {$ livraison- & gt; सेट एसीसी ($ ग्राहक); $ Livraison- & gt; setChoix ($ livraison- & gt; getChoix ()); $ Em- & gt; जारी रहती है ($ LIVRAISON); $ Em- & gt; फ्लश (); $ $ --- ($- >- यूआरएल यूआरएल ('you_commercant_livraison_editer', एरे ('आईडी' = & gt; $ livraison- & gt; getId ()) लौटें);; }}

आप एक महत्वपूर्ण बात भूल गए हैं, नया "livraison" ( $ form- & gt; getData () ):

  यदि ($ form- & gt; isValid ()) {$ livraison = $ form- & gt; getData ( ); // आप नए / संपादित "livraison" $ livraison- & gt; setAccount ($ ग्राहक) प्राप्त करने के लिए भूल गए; $ Em- & gt; जारी रहती है ($ LIVRAISON); $ Em- & gt; फ्लश (); $ $ --- ($- >- यूआरएल यूआरएल ('you_commercant_livraison_editer', एरे ('आईडी' = & gt; $ livraison- & gt; getId ()) लौटें);; }   

संपादित करें:

मुझे लगता है कि आपको अपने फॉर्म फ़ील्ड में 'by_reference' सेट को गलत में जोड़ना चाहिए, यह ऐडकोिक्स को कॉल करेगा ( ) तरीका ! इसे देखें (इस भाग के अंत में)। यहां का विवरण।

  $ builder- & gt; जोड़ें ('choix', 'संग्रह', सरणी (// ... 'by_reference' = & gt; गलत,));    

No comments:

Post a Comment