Doctrine:类表继承:将父表中的现有对象添加到扩展表

时间:2016-08-10 18:55:20

标签: php mysql symfony doctrine-orm doctrine

使用教义documentation

提供的例子
<?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);

OR

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

当然,我没有设法使这项工作无法找到另一种方法。唯一可行的方法是删除对象人员并使用之前人员的数据创建新员工。

任何提示或解决方案?

1 个答案:

答案 0 :(得分:1)

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

如果你创建Person对象,那么它应该是Person到底,例如,如果员工有一些额外的字段,你会把它降级为Person,你丢失了Employee字段。这就是为什么你应该创造新的对象。

创建

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

但如果您仍想改变歧视,可以使用:

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