2012-08-14 3 views
6

मैं अपने entites पर साधारण तालिका विरासत है पहुँच संपत्ति, somehing की तरह कहते हैं:सिद्धांत 2 - एकल तालिका भाग - बच्चे इकाई

/** 
* @InheritanceType("SINGLE_TABLE") 
* @DiscriminatorColumn(name="type", type="string") 
* @DiscriminatorMap({"base"="BaseArticle", "extended"="ExtendedArticle"}) 
*/   
class BaseArticle extends \Models\BaseModel{ 
    ... 
} 
class ExtendedArticle extends BaseArticle{ 
    /** 
    * @column(type="string") 
    */ 
    protected $extendedProperty; 
} 

मैं सभी लेख प्रकार भर में एक प्रश्न क्या करने की जरूरत है, लेकिन कुछ प्रकार में कुछ संपत्ति के अनुसार क्वेरी विस्तारित ExtendedArticle में है, यानी प्रतिबंधित:

[Semantical Error] line 0, col 406 near 'extendedProperty="xy"))': Error: Class Models\Articles\BaseArticle has no field or association named location 
:

SELECT a FROM BaseArticle a WHERE (a INSTANCE OF BaseAricle) OR (a INSTANCE OF ExtendedArticle AND a.extendedProperty = "xy") 

जो मुझे folowing अपवाद देता है

तो सवाल यह है कि, अभिभावक वर्ग से पूछताछ में बच्चे की संपत्तियों का उपयोग कैसे करें?

उत्तर

0

आप नहीं कर सकते।

SELECT a 
FROM BaseArticle a 
WHERE 
    a INSTANCE OF BaseAricle 
    OR a.id IN (
     SELECT ea.id 
     FROM ExtendedArticle ea 
     WHERE ea.extendedProperty = "xy" 
    ) 
+0

धन्यवाद, लेकिन मुझे वास्तव में सरल चीज़ के लिए इस तरह के एक अक्षम सबक्वायरी करने का विचार पसंद नहीं है। एसक्यूएल में, यह वास्तव में सरल काम है, मुझे लगता है कि इस सिद्धांत के लिए सिद्धांत को कुछ मूल समर्थन की आवश्यकता है। – DaveLister

0

मैं BaseArticle में $extendedProperty जोड़ने और getters/setters का उपयोग कर प्रभावी ढंग से मेरी BaseArticle इकाई और जीवन चक्र कॉलबैक नल संभाल करने में इस संपत्ति को छुपाने के लिए द्वारा इस समाधान कर लिया है: यहाँ एक समाधान है। लेकिन यह वास्तव में बुरा समाधान है क्योंकि विरासत लगभग व्यर्थ है।