मुझे अपने मानचित्रण में कोई समस्या है। मैं इसे काम नहीं कर सकता।सिद्धांत तालिका वर्ग विरासत जब एक उपclass के पास कोई अतिरिक्त विशेषता नहीं है
/**
* @Entity
* @Table(name="actions")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"FOO" = "FooAction", "BAR" = "BarAction", ...})
*/
abstract class AbstractAction
{
...
}
विभिन्न क्षेत्रों के साथ
मैं विभिन्न कार्यों का एक समूह है, सभी: मैं तो जैसे एक सार आधार वर्ग की है। उदा:
/**
* @Entity
* @Table(name="actions_foo")
*/
class FooAction extends AbstractAction
{
...
}
लेकिन अपने कार्यों (BarAction
) AbstractAction
द्वारा आपूर्ति की उन के अलावा किसी अतिरिक्त क्षेत्रों की जरूरत नहीं है में से एक। लेकिन मैं इसे कैसे मैप कर सकता हूं? मैंने @Table
को छोड़कर या का उपयोग AbstractAction
के रूप में करने का प्रयास किया, लेकिन इसका कोई प्रभाव नहीं पड़ा।
/**
* @Entity
* @Table(name="actions")
*/
class BarAction extends AbstractAction
{
...
}
@Table
छोड़ना मुझे एक लापता तालिका BarAction
के बारे में PDOException
देता है। आधार वर्ग के @Table
का उपयोग करते हुए मुझे देता है:
PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
तो, मैं यह कैसे मैप करते हैं?
संपादित करें: अब तक मैंने दो और चीजों की कोशिश की है।
मैं आशा व्यक्त की कि इस तरह से यह अब एक डेटाबेस तालिका की आवश्यकता होगी में BarAction
से और साथ @Entity
को हटाने @Table
के रूप में की कोशिश की। यह काम नहीं करता है।
Doctrine\ORM\Mapping\MappingException: Class BarAction is not a valid entity or mapped super class.
अगला मैं सिर्फ एक विदेशी कुंजी स्तंभ id
के साथ अपने डेटाबेस में एक actions_bar
तालिका बनाने की कोशिश की: इसके बजाय, मैं इस त्रुटि मिलती है। तब मैंने BarAction
मैप किया। यह काम करता है (याय!) लेकिन यह एक अतिरिक्त एसक्यूएल टेबल रखने के लिए क्रूर और बदसूरत लगता है जिसकी मुझे आवश्यकता नहीं है।
तो, अभी भी एक बेहतर तरीका की तलाश में ...
डी 2 के साथ मेरे 2 वर्षों के अनुभव के आधार पर और यह [दस्तावेज़ीकरण] (http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html#class-table- विरासत), आप केवल एक प्रकार की विरासत के साथ जा सकते हैं। या तो आप तालिका तालिका में शामिल हो गए हैं और प्रत्येक इकाई के लिए एक अलग तालिका है या एक टेबल विरासत का चयन करें और अपनी सभी संस्थाओं को एक तालिका में रखें। (विज़ार्डज़ के लिए टिप्पणी जो कि अभी तक टिप्पणी करने के लिए प्रतिनिधि नहीं है) – Oded
डी 2 और दस्तावेज़ीकरण के साथ मेरे 2 साल के अनुभव के आधार पर: http://www.doctrine-project.org/docs/orm/2.0/en/reference/ विरासत-mapping.html # कक्षा-तालिका-विरासत आप केवल एक प्रकार की विरासत के साथ जा सकते हैं। या तो आप तालिका तालिका में शामिल हो गए हैं और प्रत्येक इकाई के लिए एक अलग तालिका है या एक टेबल विरासत का चयन करें और अपनी सभी संस्थाओं को एक तालिका में रखें। – WizardZ
@ सैंडर: क्या आपका 'बारक्शन' वास्तव में 'सार तत्व' का उप-वर्ग होना चाहिए? मुझे नहीं पता कि क्या आपके डोमेन मॉडल में पदानुक्रम की जड़ के रूप में 'बारएक्शन' होना समझ में आता है, लेकिन कार्यान्वयन बिंदु से, यह आपकी समस्या का समाधान करेगा, क्योंकि 'बारक्शन' केवल फ़ील्ड का उपयोग करेगा बेस टेबल! – Benjamin