5

यह मेरी आधार/मूल इकाई है, सेटअप है ताकि उसके बच्चे अपनी टेबल का उपयोग कर रहे हों।क्या एक टेबल विरासत इकाई कक्षा तालिका विरासत इकाई का विस्तार कर सकती है?

 
/** 
* @ORM\Entity 
* @ORM\Table(name="layer_object") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"service"="Service", "aircraft"="Aircraft", ...}) 
*/ 
class LayerObject {} 

विमान इकाई। एक साधारण बच्चा जो अच्छी तरह से कर रहा है

 
/** 
* @ORM\Entity 
* @ORM\Table(name="aircraft") 
*/ 
class Aircraft extends LayerObject 

सेवा इकाई। एक जटिल बच्चा, वह स्वयं एकल टेबल विरासत का उपयोग कर रहा है।

 
/** 
* @ORM\Entity 
* @ORM\Table(name="service") 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"ground"="Ground", "onboard"="Onboard"}) 
*/ 
class Service extends LayerObject {} 

सेवा इकाई

 
/** 
* @ORM\Entity 
*/ 
class Ground extends Service {} 


app/console doctrine:schema:validate का एक बच्चा है कि एक एकल तालिका का उपयोग करना चाहिए कोई त्रुटि पाता है लेकिन app/console doctrine:schema:update --force सिर्फ 'सेवा' तालिका उत्पन्न नहीं होगा, विरासत। ऐसा लगता है कि सेवा इकाई परिभाषा को अनदेखा किया जाता है।

निश्चित रूप से मैं इस तालिका के लिए एसक्यूएल बना सकता हूं, लेकिन आवेदन बढ़ेगा और किसी बिंदु पर मुझे माइग्रेशन का उपयोग करने की आवश्यकता होगी।

क्या कोई मुझे किसी दिशा में इंगित कर सकता है? धन्यवाद।

मिले एक नकली है, लेकिन कोई जवाब अब तक देखते हैं, देखें: Doctrine 2 multiple level inheritance

संपादित करें:
जब मैं 2 का स्तर बहुत (@ORM\InheritanceType("JOINED")Service इकाई के लिए) के लिए वर्ग तालिका विरासत का उपयोग यह बहुत काम करता है कुंआ। देखें: Doctrine2 Multiple level inheritance

उत्तर

4

जो आप प्राप्त करने का प्रयास कर रहे हैं वह शुद्ध मैपिंग के साथ संभव नहीं है।

के लिए दस्तावेज़ Class Table Inheritance और Single Table Inheritance स्पष्ट रूप से राज्य:

@InheritanceType, @DiscriminatorColumn और @DiscriminatorMap सर्वोच्च वर्ग मैप की इकाई पदानुक्रम का हिस्सा है पर निर्दिष्ट किया जाना चाहिए।

आप loadClassMetaDataevent जो गतिशील रूप से विरासत-प्रकार में परिवर्तन (अर्थात बच्चे संस्थाओं के पर एनोटेशन के आधार पर) के लिए एक subscriber को लागू करने से यह काम करने के लिए सक्षम हो सकता है।

कुछ और प्रेरणा this article में पाई जा सकती है।

+0

बहुत बहुत धन्यवाद। इसका मूल रूप से अर्थ है: 'शीर्षस्थ कक्षा में एक बार अपना विरासत प्रकार चुनें और इसके साथ चिपके रहें'। अभी के लिए यह मेरे आवेदन के लिए ठीक है ... – virtualize

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