2013-06-13 4 views
0

Я пытаюсь создать систему листинга для сайта, подобного сайту, в Symfony. Я хочу иметь несколько типов листинга с разными полями (и некоторыми общими полями).Наследование классов класса 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 
    { 

} 

Спасибо!

ответ

0

В документации доктрины Class Table Inheritance вы можете найти некоторые соображения, используя это. Некоторые важные факты выдержка:

  • обеспечивает наибольшую гибкость во время разработки, так как изменения любого типа всегда ограничивается выделенным столом этого типа по
  • Этой стратегии по своей сути требует многократных РЕГИСТРИРУЙТЕСЬ операции для выполнения почти любого запроса, который может оказывают негативное влияние на производительность, особенно с большими таблицами и/или больших иерархий

Как у вас есть только один уровень наследования (все объявления расширяет свою базу Listing) оно не должно большое влияние.

Смежные вопросы