symfony - 使用 Doctrine 将实体与不同的子类合并

标签 symfony inheritance doctrine-orm merge doctrine

我有一个带有单表继承的映射父类(super class) AbstractQuestion

/**
 * @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

SimpleQuestionDropdownQuestion 继承自该父类(super class)。

/**
 * 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?'}

在反序列化之后,$dquestion 是一个 DropdownQuestion 对象,正如我所希望的那样,但是在合并之后 $question 是一个 SimpleQuestion 对象,因为它之前在数据库中,所以 DropdownQuestion 的任何唯一属性都将丢失,问题将保存为 SimpleQuestion。有什么办法可以解决这个问题吗?

最佳答案

您首先必须删除现有记录 (SimpleQuestion),然后插入新记录 (DropdownQuestion)。 Doctrine 2 不支持类型转换。


注意。
您或许可以使用纯 SQL 查询更改鉴别器列,但是这 is absolutely not recommended and will for sure give you problems ...

同时检查答案 herehere因为您可能会对它们感兴趣。

关于symfony - 使用 Doctrine 将实体与不同的子类合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34622102/

相关文章:

php - 具有 ManyToOne 关联的实体上的 getArrayResult

php - FOSUserBundle 自定义错误信息 change_password

php - 使用 GroupBy 进行 Doctrine/SQL 查询 MAX

unit-testing - Symfony2 在单元测试中获取配置参数

c# - 静态构造函数和继承

mysql - 学说使加入

Symfony2/Doctrine - 修改所有查询

php - 您是否忘记了另一个命名空间的 "use"语句?

c++ - UML:具有参数依赖关系的模板类之间的继承

c++ - C++中运算符=的继承问题