2013-07-23 3 views
6

के साथ deserialized एसोसिएशन के साथ सिद्धांत सिद्धांतों को कायम रखने के बाद संघों के साथ एक सिद्धांत इकाई के लिए एक जेसन स्ट्रिंग सफलतापूर्वक deserializing। जब बने रहें, सिद्धांत इन संगठनों को हमेशा "नई संस्थाओं" के रूप में पहचानता है। मैं आईडी द्वारा केवल एसोसिएशन को कैसे अपडेट कर सकता हूं, और यदि कोई बदलाव हो तो संबंधित इकाई मानों को नहीं बदला जा सकता है?एसोसिएशन के साथ सिद्धांत सिद्धांतों के साथ जेएसएसएसरियलाइज़र

मेरे मामले:

मैं स्थिर डेटा के साथ कुछ डेटाबेस तालिकाओं की है। सबसे आसान एक इकाइयों को स्टोर करने के लिए है। (मेरे पास यूनिट नामक एक सिद्धांत इकाई है)। टेबल इस तरह है:

|id|name |ratio | 
|1 |mgr |1  | 
|2 |gr |1000 | 
|3 |Kgr |1000000| 

फिर, यदि उपयोगकर्ता एक आइटम है, जो भी एक सर्वर साइड सिद्धांत यूनिट बुलाया इकाई है बना सकते हैं। मैं एक ग्राहक के पक्ष backbone.js मॉडल का उपयोग करें और जब अद्यतन इसे इस तरह मेरी Symfony2 एप्लिकेशन को भेजी जाने वाली:

//Item object to be serialized into Item entity 
{ 
    id: 13141 
    weight: 100 
    unit: { 
     id:1 
     name:mgr 
     ratio:1 
    } 
    //many more attributes here 
} 

अब, मैं JMSSerializer साथ deserialize, सब कुछ ठीक है, लेकिन मैं सिद्धांत का ही इकाई ID अपडेट करना चाहते हैं संबंध, और पूरे यूनिट नहीं।

जब मैं जारी रहता हूं, सिद्धांत शिकायत करता है और मुझे बताता है कि उसे एक "नई यूनिट इकाई" (जो मैं चाहता हूं) नहीं मिला है और मुझे सिद्धांत इकाई में persist पर कैस्केड सेट करने के लिए कहता है। लेकिन अगर मैं ऐसा करता हूं और कोई इकाई जेसन को संशोधित करता है, तो क्या यह मेरी स्थिर इकाइयों की तालिका को नहीं बदलेगा?

उदाहरण के लिए: बुरा उपयोगकर्ता Json को संशोधित करता है इस भेजकर:

//BAD item object to be serialized into Item entity 
{ 
    id: 13141 
    weight: 100 
    unit: { 
     id:1 
     name:BadName //Will this get persisted to the database? 
     ratio:1 
    } 
    //many more attributes here 
} 

मैं निश्चित रूप से ऐसा करने के लिए नहीं करना चाहती। मैं सिर्फ आईडी के साथ इकाई को जोड़ना चाहता हूं: 1 आइटम में।

यह मामला सरल है, और मैं सिर्फ आईडी द्वारा इकाई ला सकता हूं और फिर इसे इकाई में सेट कर सकता हूं, लेकिन मेरे असली ऐप में आइटम इकाई बहुत बड़ी है इसलिए मैं इसे स्वचालित रूप से संभालना चाहता हूं।

¿कोई विचार? जब आप पाठ इकाई सदस्य के प्रकार है क्या deserialize

:

उत्तर

4

मुझे इस समझ लो? क्या यह class सिर्फ array का उदाहरण है?

अगर मैं सही ढंग से समझ और यह class उदाहरण के लिए, आप unit संपत्ति पर cascademerge (नहीं persist) करने के लिए सेट कर सकते हैं ताकि आप कर सकता है:

$em = ...; // your entity manager 
$item = $em->merge($item); // merge will cascade to `unit` property as well 

आशा इस मदद करता है ...

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