在开始之前,请注意我正在学习 symfony,所以请记住这一点!我只是想了解它是如何工作的。
这就是我想要实现的目标:
我想使用学说制作一个实体继承的简单示例。这就是我的示例的样子:
- 摘要父类:特点
- 儿童1班:Magician
- 儿童2班:Warrior
- 儿童3班:Archer
因此,在阅读了一些文档后,我决定使用 Doctrine 的 STI(单表继承)。
家长班:
/**
* Character
*
* @ORM\Table(name="character")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CharacterRepository")
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"magician_db" = "Magician", "warrior_db" = "Warrior", "archer_db" = "Archer"})
*/
abstract class Character{
protected id;
protected name;
public function getId();
public function getName();
public function setName();
}
儿童1级:
class Warrior extends Character{
protected armor;
public function battleShout();
}
儿童2班:
class Magician extends Character{
protected silk;
public function spellAnnounce();
}
儿童3级:
class Archer extends Character{
protected leather;
public function arrows();
}
我设法在数据库中创建表,并成功加载用于测试目的的装置。我还使我的主视图起作用(列出所有角色)。
我的问题 :现在我希望能够使用单个表单创建、编辑和删除列表中的特定字符。例如我会有一个“类型”选择字段,我可以在其中选择“战士”、“魔术师”或“弓箭手”然后我就可以填写所选实体的特定字段。假设我在表单中选择“战士”,那么我希望能够设置护甲属性(当然还有父母之一)并将其保存在数据库中。
我不知道该怎么做,因为我的父类是抽象的,所以我无法基于该对象创建表单。
提前感谢您的帮助,我真的需要它!
PS:如果有更好的解决方案/实施,请不要犹豫!