2012-08-14 103 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,即:

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

至極給了我如下因素的異常:

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

所以問題是,如何在查詢父類時訪問孩子的屬性?

回答

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

謝謝,但我真的不喜歡爲簡單的事情做這樣一個低效的子查詢的想法。在SQL中,這是非常簡單的任務,在我看來,學說需要一些本地支持。 – DaveLister 2012-08-15 08:53:32

0

我已經加入到$extendedPropertyBaseArticle使用getter/setter方法,以有效地隱藏在我BaseArticle實體和生命週期回調來處理NULLABLE這個屬性解決了這個。但這是非常糟糕的解決方案,因爲繼承幾乎毫無意義。