Doctrine ClassTableInheritance Howto

Fes*_*esp 3 doctrine-orm

我使用两个类:

namespace Test;
use Doctrine\ORM\Mapping as ORM;

/**
 *@Table()
 *@InheritanceType("Joined")
 *@DiscriminatorMap({"baseclass"="BaseClass", "subclass"="SubClass"}
 *@Entity
*/
class BaseClass{

     /**
      *@Column(name="id", type="integer")
      *@Id
      *@GeneratedValue(strategy="IDENTITY")
     */
     private $id;
}


namespace Test;
use Doctrine\ORM\Mapping as ORM;

/**
 *@Table()
 *@Entity
 */
class SubClass extends BaseClass{

     /**
      * @Column(name="v", type="string", nullable="false")
      */
      private $v;
}
Run Code Online (Sandbox Code Playgroud)

我无法持久化SubClassObject.我收到以下errorMessage:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'dtype' in 'field list'
Run Code Online (Sandbox Code Playgroud)

我是Doctrine和ORM的新手,所以我需要一些帮助.

编辑:使用cli orm后:create-schema:工具,baseclass有一个dtype-field.是否可以创建没有该字段的实体,该字段代表什么?

Kri*_*van 5

dtype-field是默认的@DiscriminatorColumn.您可以按如下方式更改列名称:

@InheritanceType("Joined")
@DiscriminatorColumn(name="[CHANGE]", type="string")
@DiscriminatorMap({"baseclass"="BaseClass", "subclass"="SubClass"}
Run Code Online (Sandbox Code Playgroud)

继承层次结构中,无法跳过此字段.此字段将类型映射到适当的类.在您的示例中:Type子类引用SubClass类.