使用教义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);
当然,我没有设法使这项工作无法找到另一种方法。唯一可行的方法是删除对象人员并使用之前人员的数据创建新员工。
任何提示或解决方案?
答案 0 :(得分:1)
Doctrine不允许动态更改类型,为什么?:
如果你创建Person对象,那么它应该是Person到底,例如,如果员工有一些额外的字段,你会把它降级为Person,你丢失了Employee字段。这就是为什么你应该创造新的对象。
创建继承只是为了将OOP继承映射到数据库,如果你想要子实体中的一些额外字段,则使用它。
但如果您仍想改变歧视,可以使用:
$em->getConnection()->exec( "UPDATE Person SET discr = 'employee' WHERE id = ".$entity->getId() );