2016-08-10 63 views
1

使用由教義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 
{ 
    // ... 
} 

假定i有一個現有的對象者提供的爲例。我希望將此人推薦爲員工。我找不到這樣做的方法。我試圖添加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

我遇到了同樣的問題,我決定用原始的SQL查詢做...改變DISCR手動 – Alsatian

+0

@Alsatian謝謝。我也是這樣。好,你設法這樣做。如果有其他解決方案,我會在等待另一個解決方案時這樣做。如果你想把它作爲答案發布,我會很高興得到它。 – Brieuc

回答

1

主義不容許更改動態類型,爲什麼?:

如果u創建Person對象的應該是人到最後,例如,如果員工都會有一些額外的領域,而u將它降級到人,你失去了員工領域。這就是爲什麼你應該創造新的對象。

繼承被創建僅用於映射OOP繼承到數據庫,使用它,如果你想在子實體中的一些額外的字段。

但是,如果你仍然想改變DISCR U可以使用:

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

好的,謝謝你的回答。但是接下來的步驟是使用@Alsatian提到的原始SQL查詢在employee表中創建用戶,不是嗎? – Brieuc