我使用两个类:
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;
}
我无法持久保存SubClassObject。我收到以下errorMessage:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'dtype' in 'field list'
我是Doctrine和ORM的新手,所以我需要一些帮助。
编辑:使用cli orm:create-schema:工具后,基类有一个dtype-field。是否可以创建没有该字段的实体,该字段代表什么?
答案 0 :(得分:5)
dtype-field是默认的@DiscriminatorColumn。您可以按如下方式更改列名称:
@InheritanceType("Joined")
@DiscriminatorColumn(name="[CHANGE]", type="string")
@DiscriminatorMap({"baseclass"="BaseClass", "subclass"="SubClass"}
在inheritance hierarchy中,无法跳过此字段。此字段将类型映射到适当的类。在您的示例中:Type子类引用SubClass类。