Doctrine 2 - 单表继承 - 子实体的访问属性

Dav*_*ter 6 sql inheritance doctrine-orm

我的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;
} 
Run Code Online (Sandbox Code Playgroud)

我需要对所有文章类型进行查询,但在某些类型中,通过某些属性限制查询,即在扩展的ExtendedArticle中,即:

SELECT a FROM BaseArticle a WHERE (a INSTANCE OF BaseAricle) OR (a INSTANCE OF ExtendedArticle AND a.extendedProperty = "xy")
Run Code Online (Sandbox Code Playgroud)

这给了我以下例外:

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

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

Adr*_*ult 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"
    )
Run Code Online (Sandbox Code Playgroud)