【问题标题】:Doctrine ClassTableInheritance HowtoDoctrine 类表继承如何
【发布时间】:2011-11-16 13:17:04
【问题描述】:

我使用两个类:

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。我收到以下错误消息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'dtype' in 'field list'

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

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

【问题讨论】:

标签: doctrine-orm


【解决方案1】:

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

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

inheritance hierarchy 中,不能跳过此字段。该字段将类型映射到适当的类。在您的示例中:类型子类是指 SubClass 类。

【讨论】:

  • 请注意,链接已损坏。请问可以更新一下吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2017-12-05
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多