मैं PHP के लिए सिद्धांत ओआरएम (v1.2) के साथ प्रयोग कर रहा हूं। मैंने दो बच्चों के वर्ग "जिन" और "व्हिस्की" के साथ एक वर्ग "शराब" परिभाषित किया है। मैं वर्गों को तीन अलग डेटाबेस टेबल पर मैप करने के लिए ठोस विरासत (अधिकांश साहित्य में कक्षा तालिका विरासत) का उपयोग कर रहा हूं।PHP सिद्धांत 1.2 ओआरएम - कक्षा तालिका विरासत के साथ बहुलक प्रश्न
मैं निम्नलिखित को निष्पादित करने का प्रयास कर रहा हूँ:
$liquor_table = Doctrine_Core::getTable('liquor');
$liquors = $liquor_table->findAll();
प्रारंभ में, मैं उम्मीद $ शराब सभी शराब से युक्त एक Doctrine_Collection होने के लिए, चाहे वे व्हिस्की या जिन हो। लेकिन जब मैं कोड निष्पादित करता हूं, तो मुझे व्हिस्की और जिन डेटाबेस टेबल में कई पंक्तियों के बावजूद खाली संग्रह मिलता है। जेनरेट किए गए एसक्यूएल के आधार पर, मैं समझता हूं कि क्यों: ओआरएम "शराब" तालिका से पूछताछ कर रहा है, न कि व्हिस्की/जिन टेबल जहां वास्तविक डेटा संग्रहीत किया जाता है।
ध्यान दें कि जब मैं विरासत प्रकार को कॉलम एकत्रीकरण (सरल तालिका विरासत) पर स्विच करता हूं तो कोड पूरी तरह से काम करता है।
सभी व्याख्याकों वाले Doctrine_Collection को प्राप्त करने का सबसे अच्छा तरीका क्या है?
अद्यतन
कुछ और अनुसंधान के बाद, ऐसा लगता है कि मैं सिद्धांत "व्हिस्की" और "जिन" टेबल से परिणाम सेट गठबंधन करने के लिए पर्दे के पीछे किसी SQL UNION
कार्रवाई करते जा करने के लिए उम्मीद कर रहा हूँ।
इसे पॉलिमॉर्फिक क्वेरी के रूप में जाना जाता है।
this ticket के अनुसार, यह कार्यक्षमता सिद्धांत 1.x में उपलब्ध नहीं है। यह 2.0 रिलीज के लिए नियत है। (CTI के लिए सिद्धांत 2.0 दस्तावेज़ भी देखें)।
तो इस जानकारी के प्रकाश में, इस कमी के आसपास काम करने का सबसे साफ, सबसे प्रभावी तरीका क्या होगा? एकल टेबल विरासत पर स्विच करें? दो डीक्यूएल प्रश्नों को निष्पादित करें और परिणामी Doctrine_Collections को मैन्युअल रूप से मर्ज करें?