के बीच में सुपर क्लास मैप किया गया इस प्रकार मैं वर्तमान में एक मॉडल संरचना है:Symfony2/सिद्धांत वर्ग तालिका विरासत
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="related_type", type="string")
* @ORM\DiscriminatorMap({"type_one"="TypeOne", "type_two"="TypeTwo"})
*/
abstract class BaseEntity {
... (all the usual stuff, IDs, etc)
/**
* @ORM\OneToMany(targetEntity="Comment", mappedBy="baseEntity")
*/
private $comments;
}
/**
* @ORM\Entity
*/
class TypeOne extends BaseEntity {
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string")
*/
private $description;
}
/**
* @ORM\Entity
*/
class TypeTwo extends BaseEntity {
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string")
*/
private $description;
}
/**
* @ORM\Entity
*/
class Comment {
... (all the usual stuff, IDs, etc)
/**
* @ORM\ManyToOne(targetEntity="BaseEntity", inversedBy="comments")
*/
private $baseEntity;
}
विचार यहाँ अन्य तालिकाओं में से किसी के लिए एक टिप्पणी टाई करने में सक्षम होना है। यह सब अभी तक ठीक काम कर रहा है (मान लीजिए, मैं अभी भी डिज़ाइन विकल्पों की खोज कर रहा हूं इसलिए ऐसा करने का एक बेहतर तरीका हो सकता है ...), लेकिन एक बात मैंने देखी है कि उप-वर्गों में कुछ सामान्य फ़ील्ड हैं कि मैं एक सामान्य माता-पिता वर्ग में जाना चाहता हूं। मैं उन्हें बेसइन्टिटी में नहीं ले जाना चाहता क्योंकि वहां अन्य वस्तुएं होंगी जो बेसइन्टिटी के बच्चे हैं, लेकिन उनमें उन फ़ील्ड नहीं होंगे।
मैं बहुत की तरह, बीच में एक MappedSuperclass माता पिता वर्ग बनाने पर विचार किया है:
/**
* @ORM\MappedSuperclass
*/
abstract class Common extends BaseEntity {
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\Column(type="string")
*/
private $description;
}
/**
* @ORM\Entity
*/
class TypeOne extends Common {}
/**
* @ORM\Entity
*/
class TypeTwo extends Common {}
मैं लगा यह काम करेगा, लेकिन सिद्धांत डेटाबेस स्कीमा जनरेटर शिकायत कर रहा है कि मैं एक OneToMany मानचित्रण नहीं हो सकता एक मैप्डसुपरक्लास पर। मुझे यह एक समस्या होने की उम्मीद नहीं थी क्योंकि OneToMany मैपिंग रूट बेसएन्टीटी और टिप्पणी तालिका के बीच अभी भी है। क्या कोई अलग संरचना है जिसका उपयोग करना चाहिए, या इन क्षेत्रों को बेसइन्टिटी पर जोड़ने के बिना इन क्षेत्रों को आम बनाने के लिए अन्य तरीका है?
मैं समझता हूं कि एक मैप किए गए सुपरक्लास पर एक से कई संगठन संभव नहीं हैं ... हालांकि मेरा परिदृश्य थोड़ा अलग है। मेरी प्रस्तावित संरचना बेसइन्टिटी (एक वास्तविक इकाई) है -> मैप्डसुपरक्लास -> ग्रैंडचिल्डेरेंटिटीज (संस्थाएं)। एक से कई एसोसिएशन बेसइन्टिटी और दूसरी इकाई के बीच है। तो तकनीकी रूप से, एसोसिएशन मैप किए गए सुपरपरक्लास के लिए नहीं है क्योंकि मैप किए गए सुपरक्लास बेसएन्टीटी का एक बच्चा है और इसमें एक से कई एसोसिएशन शामिल नहीं हैं। – cdwhatcott
अद्यतन के लिए धन्यवाद मेरे अद्यतन उत्तर – KTastrophy
देखें। कुछ चीजों पर काम करने में कुछ समय बिताया और फिर इस समस्या पर वापस आकर, मुझे लगता है कि सबसे अच्छा विकल्प 'सामान्य' को एक इकाई बनाने जैसा होगा जैसा आप सुझाव देते हैं। – cdwhatcott