原则 2 - 子实体的单表访问属性



我的实体上有简单的表继承,可以这样说:

/** 
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"base"="BaseArticle", "extended"="ExtendedArticle"}) 
*/         
class BaseArticle extends ModelsBaseModel{
   ...
}
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")

这给了我以下例外:

[语义错误] 第 0 行,第 406 行,靠近"扩展属性="xy"))":错误:类模型\文章\基本文章没有名为位置的字段或关联

所以问题是,如何在查询父类时访问子属性?

你不能。解决方法如下:

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

我已经通过在BaseArticle中添加$extendedProperty并使用getter/setters有效地将此属性隐藏在我的BaseArticle实体和生命周期回调中以处理NULLABLE来解决此问题。但这确实是一个糟糕的解决方案,因为继承几乎毫无意义。

相关内容

  • 没有找到相关文章

最新更新