2012-01-20 7 views
10

विस्तारित करना मैं इकाई \ बेस कक्षाओं को विस्तारित करना चाहता हूं, यह सिद्धांत 2.1 में कैसे करें? मेरे शोध से पता चला है कि जब भी किसी को यह वह सिद्धांत 1.2 पर स्विच कर के साथ समस्या का सामना करना पड़ता:) n मैं YAML विन्याससिद्धांत: इकाई वर्ग

+0

आप इसे क्यों विस्तारित करना चाहते हैं? – jere

+0

मैं एक नई कक्षा बनाना चाहता हूं जो आधार को बढ़ाता है, जैसे उपयोगकर्ता उपयोगकर्ताबेस को बढ़ाता है। असल में अभी सभी आधार वर्ग संस्थाओं/आधार में हैं इसलिए मैं संस्थाओं में नई कक्षाएं बनाना चाहता हूं और वे संस्थाओं/बेस कक्षाओं का विस्तार करेंगे – mkk

+0

@jaro मैं सिद्धांत 1.2 से पैटर्न का पालन करना चाहता हूं कि मेरे पास बेस क्लास और सामान्य कक्षाएं हैं, मैं अपनी खुद की कस्टम विधियों को लिखने में सक्षम होने के लिए बेस क्लास का विस्तार करता हूं। समस्या यह है कि बेस क्लास स्वतः उत्पन्न होते हैं और जब भी मैं मॉडल में कुछ बदलता हूं तो मैं कोड खोना नहीं चाहता हूं। – mkk

उत्तर

16

सिद्धांत 2.X संस्थाओं के रूप में Popos (प्लेन ओल्ड पीएचपी वस्तुओं काम उपयोग कर रहा हूँ)। सही ढंग से विस्तार करने के लिए, सिद्धांत आपको जेपीए से मैप किए गए सुपर क्लासेस नामक अवधारणा का उपयोग करने के लिए मजबूर करता है। विचार बहुत आसान है। जब भी आप बेस क्लास रखना चाहते हैं और अपनी संस्थाओं को इससे विस्तार करना चाहते हैं (मैं डीबी स्तर पर विरासत के बारे में बात नहीं कर रहा हूं), आपको बस अपनी बेस क्लास को मैप्डसुपर क्लास के रूप में बनाना है। http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses

धन्यवाद

+0

बढ़ाया है, मैंने कुछ ऐसा किया है, प्रयास के लिए धन्यवाद, भले ही समस्या हल हो गई हो, कुछ दिन पहले मैं आपके उत्तर को वैसे भी सही तरीके से चिह्नित करूंगा – mkk

+2

आप समाधान पोस्ट कर सकते थे, आपको पता है। इस समुदाय का पूरा उद्देश्य एक दूसरे की मदद करना है। –

+0

@ निकोलापेटकंस्की आप 100% सही हैं, और आप देख सकते हैं कि अगर मुझे समाधान मिल जाए तो मैं अपने प्रश्न का उत्तर दूंगा। – mkk

2

यहाँ गुइलहर्मे ब्लैंको लिंक से समाधान:

यहाँ एक उदाहरण है। मुझे एक लिंक के बजाय एक पोस्ट समाधान होना पसंद है जो अंततः भविष्य में काम नहीं कर सकता:

<?php 
/** @MappedSuperclass */ 
class MappedSuperclassBase 
{ 
    /** @Column(type="integer") */ 
    protected $mapped1; 

    /** @Column(type="string") */ 
    protected $mapped2; 

    /** 
    * @OneToOne(targetEntity="MappedSuperclassRelated1") 
    * @JoinColumn(name="related1_id", referencedColumnName="id") 
    */ 
    protected $mappedRelated1; 

    // ... more fields and methods 
} 

/** @Entity */ 
class EntitySubClass extends MappedSuperclassBase 
{ 
    /** @Id @Column(type="integer") */ 
    private $id; 

    /** @Column(type="string") */ 
    private $name; 

    // ... more fields and methods 
}