我一整天都在阅读,测试,重新阅读和重新测试,我无法找到解决问题的正确方法。
假设您有一个文件实体,哪种交换机类型,转到另一个块。 (我的意思是,在数据库中我只有1个文件表,但在显示器中,我有一个块"图像",另一个"文件"和另一个"地图&#34 )。所有3个文件都具有不同的字段值"键入"。
我知道最简单的应该是有3张桌子,但我不想因为使用奏鸣曲而破坏我的架构。
我完全弄清楚如何在实践中使用preupdate和prepersist事件以及初始化阶段。但即使我试图给出选项" admin_code"到我未映射的属性$ images。它总是说它需要一个管理类。由于注释@ORM \ OneToMany映射了admin类,我无法使用它,否则doctrine会生成另一个表。
有没有办法实现这个目标? admin_code选项是否有错误?
或者我应该通过前端解决方案? (我更喜欢后端,但我会尽可能做到这一点)
答案 0 :(得分:1)
您是否尝试使用Doctrine inheritance
我认为你将能够创建一个抽象的File类和其他3个扩展File的类:
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"image" = "Image", "document" = "Document", "map" = "Map"})
*/
abstract class File {
...
}
然后你必须创建3个类:
class Image extends File {
...
}
class Document extends File {
...
}
class Map extends File {
...
}
之后,您将能够创建3个不同的管理类以在Sonata中显示。