我的entites上有简单的表继承,比如说:
/**
* @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")
Wich给了我以下例外:
[Semantical Error] line 0, col 406 near 'extendedProperty="xy"))': Error: Class Models\Articles\BaseArticle has no field or association named location
所以问题是,如何在查询父类中访问子属性?
答案 0 :(得分: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"
)
答案 1 :(得分:0)
我已经通过将$extendedProperty
添加到BaseArticle
并使用getter / setter在我的BaseArticle
实体和生命周期回调中有效地隐藏此属性来处理NULLABLE来解决这个问题。但这是非常糟糕的解决方案,因为继承几乎毫无意义。