Sonata Admin,将一个实体(在db中)拆分为更多显示块切换一个描述性字段

时间:2015-07-14 17:57:53

标签: symfony sonata-admin symfony-sonata

我一整天都在阅读,测试,重新阅读和重新测试,我无法找到解决问题的正确方法。

假设您有一个文件实体,哪种交换机类型,转到另一个块。 (我的意思是,在数据库中我只有1个文件表,但在显示器中,我有一个块"图像",另一个"文件"和另一个"地图&#34 )。所有3个文件都具有不同的字段值"键入"。

我知道最简单的应该是有3张桌子,但我不想因为使用奏鸣曲而破坏我的架构。

我完全弄清楚如何在实践中使用preupdate和prepersist事件以及初始化阶段。但即使我试图给出选项" admin_code"到我未映射的属性$ images。它总是说它需要一个管理类。由于注释@ORM \ OneToMany映射了admin类,我无法使用它,否则doctrine会生成另一个表。

有没有办法实现这个目标? admin_code选项是否有错误?

或者我应该通过前端解决方案? (我更喜欢后端,但我会尽可能做到这一点)

1 个答案:

答案 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中显示。