我有一個映射超類AbstractQuestion
單表繼承。使用Doctrine合併實體與不同的子類
/**
* @ORM\Entity
* @ORM\MappedSuperclass
* @ORM\Table(name="Question")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="dtype", type="string")
* @ORM\DiscriminatorMap({
* "simple": "SimpleQuestion",
* "dropdown": "DropdownQuestion"
* })
*/
abstract class AbstractQuestion
SimpleQuestion
從這個超DropdownQuestion
繼承。
/**
* Class SimpleQuestion.
* @ORM\Entity()
*/
class SimpleQuestion extends AbstractQuestion
我要修改現有SimpleQuestion
,並使其成爲DropdownQuestion
。
保存問題時,我反序列化併合並問題,其中包含一個ID和'dtype'以及其他屬性。
$dquestion = $this->serial->fromJson($request->getContent(), AbstractQuestion::class);
$question = $this->em->merge($dquestion);
$this->em->flush();
所以我提出這樣的:
{ id: 12, dtype: 'dropdown', 'text': 'What is my favourite animal?'}
的deserialisation後,$dquestion
是我希望的DropdownQuestion
對象,但在合併後$question
是SimpleQuestion
對象,因爲它是在數據庫中以前,因此DropdownQuestion的任何獨特屬性都會丟失,問題將被保存爲SimpleQuestion。有什麼辦法可以解決這個問題嗎?
謝謝。令人失望,但是的確如此。我結束了這種情況,因爲我將存儲在長文本中的序列化對象轉換爲實體。否則,我想我不會考慮改變問題類型。謝謝。 – darkbluesun