Doctrine类表继承 - 多种类型

时间:2013-06-13 16:21:15

标签: php inheritance symfony doctrine symfony-2.1

我正在尝试为Symfony中的类似分类广告的网站制作一个列表系统。我希望有多个不同字段的列表类型(以及一些常见字段)。

我打算创建一个主要的Listing类,它将包含所有常见字段(名称,描述,价格),然后是具有特定于不同类型的字段的子类。

通过我的研究,听起来像Doctrine中的类表继承是最好的解决方案。我这是对的吗?我可能有多达10个“亚型”并且听说它可能不太适合表现。

    /**
    * Listing
    *
    * @ORM\Table(name="listing")
    * @ORM\InheritanceType("JOINED")
    * @ORM\DiscriminatorColumn(name="discr", type="string")
    * @ORM\DiscriminatorMap({"listing" = "Listing","recreation-vehicle" = "RecreationVehicle","vehicle" = "Vehicle","event" = "Event","classified" = "Classified","buyandsell" = "BuySell","real-estate" = "RealEstate","business" = "Business"})
    */
    class Listing
    {

}

谢谢!

1 个答案:

答案 0 :(得分:0)

Class Table Inheritance的学说文档中,您可以找到使用它的一些注意事项。摘录了一些重要事实:

  • 在设计时提供最大的灵活性,因为任何类型的更改始终仅限于该类型的专用表
  • 此策略本身需要多个JOIN操作才能执行任何可能对性能产生负面影响的查询,尤其是对于大型表和/或大型层次结构

由于您只有一个继承级别(所有列表都扩展了您的基础Listing),因此不应产生太大影响。