2012-08-14 13 views
6

çocuk varlığın erişim özelliği, somehing gibi ki:Doktrini 2 - - tek tablo devralma benim entites basit tablo devralma var

/** 
* @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; 
} 

tüm makale türleri arasında bir sorgu yapmak gerekir, ancak bazı türlerinde

[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") 

Wich bana folowing istisna veriyor: genişletilmiş ExtendedArticle olduğu bazı özelliğiyle sorgu, yani kısıtlamak

Soru, ana sınıf sorgusunda çocuğun özelliklerine nasıl erişilir?

cevap

0

Yapamazsınız. Ben BaseArticle içine $extendedProperty ekleyerek ve etkili null işlemek için benim BaseArticle varlık ve yaşam döngüsü geri çağrıları bu özelliği gizlemek için getters/ayarlayıcıları kullanarak bu çözmüş

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

Teşekkürler, ama basit bir şey için böyle bir verimsiz alt sorgu yapma fikrini gerçekten sevmiyorum. SQL'de, bu gerçekten basit bir görev, bana göre doktrinin bunun için bir miktar yerel desteğe ihtiyacı var. – DaveLister

0

: İşte bir çözüm bu. Ancak miras neredeyse anlamsız olduğundan bu gerçekten kötü bir çözümdür.