2011-06-08 10 views
7

मेरे पास दस्तावेज़ उपयोगकर्ता में संदर्भित एक दस्तावेज़ है। जब मैं उपयोगकर्ता को पुनर्प्राप्त करता हूं, तो इसमें कोई व्यक्ति ऑब्जेक्ट एम्बेड नहीं होता है, लेकिन एक व्यक्ति प्रॉक्सी ऑब्जेक्ट होता है। प्रॉक्सी को "पूर्ण" दस्तावेज़ (इसलिए व्यक्ति प्रॉक्सी => व्यक्ति) बनने के लिए "बल" करने का कोई तरीका है।'मूल' दस्तावेज़ में कनवर्ट करने के लिए एक सिद्धांत मोंगोडीबी ओडीएम दस्तावेज़ प्रॉक्सी को कैसे बल देना है?

मैं (अतिरिक्त डेटा पुनः प्राप्त करने के लिए एक विधि इसलिए __load ट्रिगर किया जाता है बुला की कोशिश की है, लेकिन वस्तु 'प्रॉक्सी' संस्करण बनी हुई है।

मुझे आशा है कि किसी से ODM के documention करता है इस बारे में अधिक प्रकाश डाला जा सकता है।

+0

ऐसा लगता है कि आप एक गैर-रिलेशनल डेटाबेस – EhevuTov

+1

में एक रिश्ते को करने की कोशिश कर रहे हैं, मुझे विश्वास है कि आप क्या सोच रहे हैं डॉक्टरेट आलसी लोडिंग संदर्भित जानकारी है? यह आपके एप्लिकेशन या समस्या को हल करने में कितनी समस्या है जिसे आप हल करने की कोशिश कर रहे हैं? – Dayson

उत्तर

2

आप Priming References ऐसा कर सकते हैं

उदाहरण दस्तावेज:।

/** @Document */ 
class User 
{ 
    /** @ReferenceOne(targetDocument="Person") */ 
    private $person; 
} 

/** @Document */ 
class Person 
{ 
    // ... 
} 

QueryBuilder का उपयोग करना:

/* @var $user User */ 
$user = $dm->createQueryBuilder('User') 
    ->field('person')->prime(true) 
    ->getQuery() 
    ->getSingleResult(); 
+0

यह क्वेरी एक अपवाद फेंक देती है, क्योंकि प्राइम का उपयोग करने के बाद आप getSingleResult() पर सीमा का उपयोग नहीं कर सकते हैं। – Biruwon

2

आप के बाद से प्रॉक्सी वर्ग अपने कोड के लिए 100% पारदर्शी होना चाहिए, मूल वस्तु को निकालने के लिए की जरूरत नहीं होनी चाहिए।

यदि आपको दस्तावेज़ को क्रमबद्ध करने की आवश्यकता है, उदाहरण के लिए इसे एपीआई के माध्यम से भेजने के लिए, अपने दस्तावेज़ पर serialize() विधि को सही ढंग से कार्यान्वित करना सुनिश्चित करें।

आप अभी भी प्रॉक्सी के बिना संदर्भित दस्तावेज़ प्राप्त करने की आवश्यकता है, तो आप या तो prime() कर सकते हैं यह या एक अलग क्वेरी hydrate(false) निर्दिष्ट करने के साथ इसे लाने:

$user = $dm->createQueryBuilder('Person') 
      ->field('_id')->equals($user->getPerson()->getId()) 
      ->hydrate(false) 

देखें: अधिक जानकारी के लिए Doctrine ODM Doc: Disabling hydration