से माता-पिता के बजाय बाल प्रकार का ऑब्जेक्ट प्राप्त करें, मैं मोंगोडीबी से ऑब्जेक्ट पुनर्प्राप्त करने का प्रयास कर रहा हूं लेकिन मुझे एक समस्या का सामना करना पड़ रहा है कि यह बच्चे के बजाय आधार प्रकार के तत्व को वापस कर रहा है और यह परेशानी पैदा कर रहा है, मुझे पता चला कि यह किसी संपत्ति के मूल्य पर निर्भर है।मोंगोडीबी
/**
* @MongoDB\Document(
* collection="zoo",
* repositoryClass="ZooRepository",
*)
*/
class Zoo
{
/**
* @MongoDB\ReferenceMany(targetDocument="Animal", inversedBy="zoo", strategy="addToSet")
* @var \Doctrine\Common\Collections\ArrayCollection
*/
protected $animals;
/**
* @return mixed
*/
public function getAnimals()
{
return $this->animals->toArray();
}
//Some more code
}
/**
* @MongoDB\Document(
* repositoryClass="AnimalRepository",
* collection="animals"
*)
* @MongoDB\InheritanceType("SINGLE_COLLECTION")
* @MongoDB\DiscriminatorField("discriminator")
* @MongoDB\DiscriminatorMap({
* "animal"="Animal",
* "birds"="Bird",
* "mamals"="Mamals"})
*/
class Animal
{
/**
* @MongoDB\ReferenceMany(targetDocument="Location", mappedBy="animals", simple=true, cascade={"persist"})
*
* @Assert\Count(min="0", max="1")
*/
protected $locations;
}
/**
* @MongoDB\Document(repositoryClass="AnimalRepository")
*/
class Bird extends Animal
{
}
/**
* @MongoDB\Document(repositoryClass="AnimalRepository")
*/
class Mamals extends Animal
{
}
समस्या यह है: जब मैं ZooHandler से getAnimals() को कॉल करता हूं तो यह पशु प्रकार का ऑब्जेक्ट देता है। मैं चाहता हूं कि मामाल्स या बर्ड का प्रकार क्या है। अजीब बात यह है कि, अगर मेरे पास पशु-> स्थान में कोई तत्व है तो मुझे यह सही मिला (मामल/बर्ड) और यदि उसके पास तत्व नहीं है तो मुझे आधार प्रकार मिला।
यदि मुझे AnimalHandler में AnimalRepository से सीधे सभी जानवरों की सूची मिलती है, तो मुझे तदनुसार मामल/पक्षी की वस्तुएं मिल रही हैं।
संपादित: चिड़ियाघर वस्तु
> db.zoo.findOne()
{
"_id" : ObjectId("5822bd23085f753b5a5a2408"),
"name" : "Zoo 2",
"active" : true,
"archived" : false,
"animals" : [
DBRef("animals", ObjectId("556cc7adec045b1a0c8b4567"),{ "$db": "tester", "discriminator": "Test\\Bundle\\Core\\Document\\Animal" }),
DBRef("animals", ObjectId("556cb3b0ec045bbf068b4582"),{ "$db": "tester", "discriminator": "Test\\Bundle\\Core\\Document\\Animal" })
]
}
यकीन के लिए वहाँ कुछ और गुण है कि नहीं दिखाए जाते हैं, के रूप में वे अप्रासंगिक हो रहे हैं।
समस्या अजीब लगती है, क्या आप एक चिड़ियाघर ऑब्जेक्ट के लिए डेटाबेस में संग्रहीत पोस्ट कर सकते हैं? कृपया ध्यान दें कि डेटाबेस में उपयोग किया जाने वाला डीबीआरआईफ़ डिफ़ॉल्ट रूप से कोई अतिरिक्त फ़ील्ड नहीं दिखाएगा ओडीएम को जोड़ा जाना चाहिए (जैसे भेदभावकर्ता) और इनमें से हम सबसे अधिक दिलचस्पी रखते हैं – malarzm
@malarzm कृपया मेरा संपादन देखें। – Tester
हम रुचि रखते हैं कि डीबीआरआईएफ क्या छुपा रहे हैं जैसा कि मैंने पिछली टिप्पणी में बताया था, आप https://github.com/TylerBrock/mongo-hacker का उपयोग कर सकते हैं जो प्रिंट किए गए तरीके को बदलता है या http://stackoverflow.com/ ए/14633601/5982920 उन्हें प्रिंट करने के लिए कैसे – malarzm