Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令:类表继承:将现有对象从父表添加到扩展表_Php_Mysql_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 条令:类表继承:将现有对象从父表添加到扩展表

Php 条令:类表继承:将现有对象从父表添加到扩展表,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,Doctrine,使用条令提供的示例 或 可以肯定的是,我没有设法做到这一点,也找不到其他方法来做到这一点。唯一可行的方法是删除对象person并使用前一个人的数据创建新员工 有任何提示或解决方案吗?原则不允许动态更改类型,为什么 如果您创建Person对象,其结尾应该是Person,例如,如果employee将有一些额外字段,并且您将其降级为Person,那么您将丢失employee字段。这就是你应该创建新对象的原因 创建继承只是为了将OOP继承映射到数据库,若您希望子实体中有一些额外字段,请使用它 但是,如果

使用条令提供的示例

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


有任何提示或解决方案吗?

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

如果您创建Person对象,其结尾应该是Person,例如,如果employee将有一些额外字段,并且您将其降级为Person,那么您将丢失employee字段。这就是你应该创建新对象的原因

创建继承只是为了将OOP继承映射到数据库,若您希望子实体中有一些额外字段,请使用它

但是,如果您仍然想更改discr,您可以使用:

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

我遇到了同样的问题,我决定用原始SQL查询来解决这个问题。。。更换discrmanually@Alsatian非常感谢。我也这么想。很好,你这样做了。我会在等待另一个解决方案时这样做,以防有其他解决方案。如果你想把它作为一个答案贴出来,我很乐意投它的赞成票。好的,谢谢你的回答。但是下一步是使用@Alsatian提到的原始SQL查询在employee表中创建用户,不是吗?
$employee = new Employee();
$employee->setRole('ROLE_EMPLOYEE');
$employee->setPerson($person);
$employee = new Employee();
$employee->setRole('ROLE_EMPLOYEE');
$person->setEmployee($employee);
$em->getConnection()->exec( "UPDATE Person SET discr = 'employee' WHERE id = ".$entity->getId() );