2011-06-20 7 views
5

मैं सिद्धांत 1.2 से 2.x तक स्विच कर रहा हूं और एक अजीब समस्या में चल रहा हूं।सिद्धांत 2 लगातार उन्हें अद्यतन करने के बजाय मौजूदा आइटम डालने का प्रयास करता है

मैं एक इकाई CompositionRule एक विशेषता $ buildingBlock है, एक BuildingBlock इकाई की ओर इशारा करते है।

मैंने यह विशेषता सेट की है, जिससे यह मौजूदा बिल्डिंगब्लॉक को इंगित करता है, जिसे मैं डेटाबेस से प्राप्त करता हूं।

जब मैं मुख्य ऑब्जेक्ट (कंपोज़िशनरूल) जारी रखता हूं, तो इकाई प्रबंधक एक नई बिल्डिंगब्लॉक आइटम बनाने की कोशिश करता है और इसे स्वीकार करने के बजाय डेटाबेस में डालने की कोशिश करता है कि यह पहले से मौजूद है और इसे अनदेखा कर रहा है।

मुझे नहीं लगता कि मैं यहाँ क्या खो रहा हूं जैसे कि सिद्धांत 1.2 में जब आपने $ इकाई-> save() निष्पादित की थी; सभी अंतर्निहित वस्तुओं को सही ढंग से संभाला गया था।

CompositionRule:

यहाँ मेरी मैपिंग/कोड के कुछ हिस्से हैं

<many-to-one field="buildingBlock" target-entity="BuildingBlock"> 
    <cascade><cascade-all /></cascade> 
</many-to-one> 
.. 
public function setBuildingBlock($buildingBlock) { 
    $buildingBlock->addCompositionRule($this); 
    $this->buildingBlock = $buildingBlock; 
} 

BuildingBlock

<one-to-many field="compositionRules" target-entity="CompositionRule" mapped-by="buildingBlock"> 
    <cascade> 
     <cascade-all /> 
    </cascade> 
</one-to-many> 

public function addCompositionRule($rule) { 
    $this->compositionRules->add($rule); 
} 
+0

यहां एक ही समस्या है। क्या आपको कोई समाधान मिला? – Bono

+0

वही यहाँ। +1। मेरा अस्थायी कामकाज $ em-> getUnitOfWork() -> getScheduledEntityInsertions() प्राप्त करें और विशेष संस्थाओं को हटा दें ... – tiriana

उत्तर

10

मैं uderstood है कि यह एक पुराने सवाल है, लेकिन मैं था हाल ही में एक ही समस्या है, तो यह शायद मदद कर सकता है।

यह आपकी इकाई की "अलग" स्थिति के कारण होता है। इसे ठीक करने के लिए आपको सिद्धांत :: merge() फ़ंक्शन का उपयोग करना चाहिए।

$rule = new CompositionRule; 
$block = $entityManager->merge($block); //it's important to use result of function, not the same element 
$entityManager->persist($role); 
$entityManager->flush(); 
+2

मैंने वास्तव में 3 साल पहले इस प्रश्न से पूछा था। इस बीच मैं सिद्धांत के साथ काम नहीं कर रहा हूं। मैं आम तौर पर ओआरएम ढांचे के बारे में कुछ और जानता हूं और यह एक अच्छा जवाब की तरह दिखता है। मैं इसे अन्य लोगों के लिए स्वीकार कर रहा हूं जो इस सवाल पर ठोकर खा रहे हैं। खुशी है कि आप इसे हल हो गया है! – geoffreydv

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

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