原则:类表继承:将现有对象从父表添加到扩展表


Doctrine : Class Table Inheritance : Add an existing object from parent table to extended table

使用原则文档

提供的示例
<?php
namespace MyProject'Model;
/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
 class Person
{
    // ...
}
/** @Entity */
class Employee extends Person
{
    // ...
}

假设我有一个已经存在的对象Person。我希望提升此人为员工。我找不到这样做的方法。我尝试添加OneToOne关系并创建setPerson或setUser方法。

$employee = new Employee();
$employee->setRole('ROLE_EMPLOYEE');
$employee->setPerson($person);

$employee = new Employee();
$employee->setRole('ROLE_EMPLOYEE');
$person->setEmployee($employee);

可以肯定的是,我没有设法使这个工作,也找不到其他的方法来做。唯一可行的方法是删除对象person,并使用前一个person的数据创建一个新员工。

有什么提示或解决方案吗?

原则不允许动态更改类型,为什么?:

如果你创建Person对象,它应该是Person到最后,例如,如果employee将有一些额外的字段,你将降级为Person,你失去了employee字段。这就是为什么你应该创建一个新对象。

创建

继承只是为了将OOP继承映射到数据库,如果你想在子实体中添加一些额外的字段,可以使用它。

但是如果你仍然想改变discr,你可以使用:

$em->getConnection()->exec( "UPDATE Person SET discr = 'employee' WHERE id = ".$entity->getId() );