मेरे पास एक दस्तावेज़ है जिसमें एक दस्तावेज़ एम्बेडेड है। जब मैं पहली बार ऑब्जेक्ट बनाता हूं तो सब कुछ ठीक काम करता है, लेकिन जब मैं दस्तावेज़ को अपडेट करने का प्रयास करता हूं, तो एम्बेडेड दस्तावेज़ अपडेट नहीं होता है।मैं डॉक्टर मोंगोडीबी में एम्बेडेड दस्तावेज़ कैसे अपडेट करूं?
/** @MongoDB\Document */
class DocumentA
{
/** @MongoDB\EmbedOne(targetDocument="DocumentB") **/
protected $docB;
/** @MongoDB\String */
protected $valueA;
}
/** @MongoDB\EmbeddedDocument */
class DocumentB
{
/** @MongoDB\String */
protected $valueB;
}
मेरे आवेदन में मैं एक दस्तावेज़ के लिए पूछताछ करता हूं, मानों को अद्यतन करता हूं और उन्हें डेटा स्टोर में जारी रखता हूं।
// Variant A – Does not work
$document = ... // find from data store
$document->setValueA('Hello World');
$document->getDocB()->setValueB('foo baz');
$om->persist($document);
$om->flush();
मैं एम्बेडेड दस्तावेज़ अद्यतन नहीं करते हैं, लेकिन एक नया एक सब कुछ सेट ठीक काम करता है:
// Variant B - Does work
$document = ... // find from data store
$document->setValueB('Hello World 2');
$document->setDocB(new DocumentB());
$document->getDocB()->setValueB('foo baz 2');
$om->persist($document);
$om->flush();
जैसा कि मैंने कहा, संस्करण बी ठीक काम करता है। हालांकि, मेरे आवेदन में दस्तावेज़ अधिक जटिल हैं और जब भी मुझे इसे अपडेट करना होता है तो एम्बेडेड दस्तावेज़ के लिए एक नई वस्तु बनाने के लिए यह अव्यवहारिक होगा। क्या यह तय करने के लिए कि क्या इसे अद्यतन किया जाना चाहिए, एक एम्बेडेड दस्तावेज़ के मूल्यों को देखने के लिए सिद्धांत ओडीएम को बताने का कोई तरीका है?
मुझे एक एम्बेडेड दस्तावेज़ को एक अलग के साथ बदलने में समस्याएं थीं। मेरे मामले में DocumentB एक एम्बेडेड दस्तावेज़ नहीं बल्कि एक दस्तावेज़ है। आपके द्वारा यहां दिखाए गए ऑब्जेक्ट पर डिटेच का उपयोग करने से इस परिदृश्य में भी काम किया जाता है। – Onema