我不确定这是bug还是代码中的错误:
<?php
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({
* "customer" = "Customer",
* "projectManager" = "ProjectManager",
* "developer" = "Developer"
* })
*/
abstract class Person
{
// ...
}
/**
* @Entity
*/
class Customer extends Person
{
// ...
}
/**
* @Entity
*/
abstract class Employee extends Person
{
/**
* @var boolean
* @Column(name="retired", type="boolean", nullable=true)
*/
protected $retired;
}
/**
* @Entity
*/
class ProjectManager extends Employee
{
// ...
}
/**
* @Entity
*/
class Developer extends Employee
{
// ...
}当尝试更新数据库时,app/console doctrine:schema:update --force原则会忽略Employee::退休属性,并且应用程序会导致错误:未知列“退休”
如果我手动创建该列,所有内容都将按预期的方式工作。而且,这种情况只发生在单个表中,因此如果切换到类表继承,则在模式更新时创建列。
发布于 2015-09-01 14:15:27
您不能“跳转”到最低级别的继承,您必须描述每个级别。
至少它适用于@InheritanceType("JOINED"),我想SINGLE_TABLE也是如此。
<?php
namespace MyProject\Model;
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({
* "customer" = "Customer",
* "employee" = "Employee",
* "projectManager" = "ProjectManager",
* "developer" = "Developer"
* })
*/
abstract class Person
{
// ...
}
/**
* @Entity
*/
class Customer extends Person
{
// ...
}
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({
* "employee" = "Employee",
* "projectManager" = "ProjectManager",
* "developer" = "Developer"
* })
*/
abstract class Employee extends Person
{
/**
* @var boolean
* @Column(name="retired", type="boolean", nullable=true)
*/
protected $retired;
}
/**
* @Entity
*/
class ProjectManager extends Employee
{
// ...
}
/**
* @Entity
*/
class Developer extends Employee
{
// ...
}发布于 2016-09-04 19:22:33
您不必在根实体的区分器映射中映射您的中间抽象实体,这样才能使其工作。不要把它变成一个@Entity,而是一个@MappedSuperclass。
在您的例子中,Employee应该是一个@MappedSuperclass,所有扩展Employee的东西都应该是在映射中表示的@Entity。
https://stackoverflow.com/questions/32332067
复制相似问题