Doctrine继承 - 来自Joined表的Single_Table继承

ray*_*ygo 4 php inheritance symfony doctrine-orm

这是我想要的配置:

一个实体"帐户",其中包含对两个其他实体的JOINED继承:"作者"和"AccountBackend".

然后我希望"AccountBackend"与其他两个实体具有SINGLE_TABLE继承:"Administrator"和"FeaturedAuthor".这是我定义它们的方式:

Account.php

/** 
 * @Entity (repositoryClass="Repositories\Account") 
 * @Table(name="accounts")  
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="integer")
 * @DiscriminatorMap({"1"="Author","2"="AccountBackend"})
 * @HasLifecycleCallbacks
 */
class Account
{
Run Code Online (Sandbox Code Playgroud)

Curator.php

/**
 * @Entity
 * @Table(name="accounts_author")
 */
class Author extends Account
{
Run Code Online (Sandbox Code Playgroud)

AccountBackend.php

/** 
 * @Entity (repositoryClass="Repositories\AccountBackend") 
 * @Table(name="accounts_backend")  
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="discr", type="integer")
 * @DiscriminatorMap({"1"="FeaturedAuthor","2"="Administrator"})
 * @HasLifecycleCallbacks
 */
class AccountBackend extends Account
{
Run Code Online (Sandbox Code Playgroud)

FeaturedAuthor.php

/**
 * @Entity
 */
class FeaturedAuthor extends AccountBackend
{
Run Code Online (Sandbox Code Playgroud)

Administrator.php

/**
 * @Entity
 */
class Administrator extends AccountBackend
{
Run Code Online (Sandbox Code Playgroud)

当我定义它们时,当我尝试通过CLI进行更新时,它说

"实体'实体\ AccountBackend'必须是'实体\帐户'的鉴别器映射的一部分才能在继承层次中正确映射.或者,您可以将'Entities\AccountBackend'设为抽象类,以避免发生此异常."

我没有看到我定义它们的方式有任何问题,这是我第一次尝试在已经继承的Entity上继承.什么意思错了?谢谢!

Pee*_*kmo 7

你需要在@DiscriminatorMap中为你的"AccountBackend"类提供一个案例

例如

@DiscriminatorMap({"1"="FeaturedAuthor","2"="Administrator", "3"="AccountBackend"})
Run Code Online (Sandbox Code Playgroud)

正如文档中的解释

应在@DiscriminatorMap中指定属于映射实体层次结构(包括最顶层类)的所有实体类.在上面的情况下包括Person类.