Доктрина наследования. Есть ли простой способ получить все дочерние классы / таблицы для использования их в поле выбора в формах Symfony? - PullRequest
1 голос
/ 27 февраля 2010

Я только начал использовать Symfony 1.4 и Doctrine. (Использовал 1,0 - 1,2 + много раньше двигать).

Я подумал попробовать Доктрину из-за быстрого и огромного Процесс развития в прошлом.

Благодаря jwage ;-)

Я использую Table Inheritance. Это небольшая часть моего schema.yml:

Articles:
  columns:
id: 
  type: integer(4) 
  primary: true 
  notnull: true 
  autoincrement: true 
marken_id: 
  type: integer(4) 
  notnull: false 
user_id: 
  type: integer(4) 
  notnull: false 
address_id: 
  type: integer(4) 
  notnull: false 

...

Vehicles: 

 inheritance: 
   extends: Articles 
   type: concrete 

Rennfahrzeuge: 
 columns: 
  stvo: 
    type: boolean 
    notnull: false 
    default: false 
 inheritance: 
  extends: Vehicles 
  type: concrete 


Tourenwagen: 
  inheritance: 
   extends: Rennfahrzeuge 
   type: column_aggregation 
   keyField: type 
   keyValue: 1 

...

 Sonstige:
   inheritance: 
   extends: Rennfahrzeuge 
   type: column_aggregation 
   keyField: type 
   keyValue: 6 

 Karts: 
   inheritance: 
   extends: Vehicles 
   type: concrete 
 TonyKart: 
   inheritance: 
   extends: Karts 
   type: column_aggregation 
   keyField: type 
   keyValue: 1 

...

   Sonstige:
   inheritance: 
    extends: Karts 
    type: column_aggregation 
    keyField: type 
    keyValue: 9 

Сейчас я думаю об использовании простого способа создать правильную форму.

Пользователь должен выбрать поля в верхней части формы (как вы можно посмотреть здесь: http://msm -esv.dyndns.org / frontend_dev.php / fahrzeuge / insert )

Вы должны выбрать «родительский класс», такой как Rennfahrzeuge или Karts и скоро.

После этого пользователь должен выбрать дочерний класс, такой как Tourenwagen или Sonstige.

Тогда страница должна перезагрузиться и отобразить правильную форму.

Есть ли в Doctrine какая-либо функция для получения унаследованных / дочерних классов для отображения их во втором поле выбора?

(например, у Rennfahrzeuge есть Tourenwagen, .., ..., Sonstige и Karts есть ТониКарт, ..., ..., Sonstige)

После этого я мог бы динамически создать назначенный класс формы, например:

$chooseMode      = $request->getParameter('chooseMode').'Form'; 
$modeFormClass   = new $chooseMode(); 

или я думал просто установить правильную модель в родительском Форма класса.

Что ты думаешь? Буду очень признателен за любые предложения и помощь :-)

Большое спасибо,

Марко

Ответы [ 2 ]

1 голос
/ 20 мая 2010

Если вам нужно найти подклассы Записи Доктрины, вы можете использовать
$yourSuperObject->getTable()->getOption('subclasses') или
Doctrine::getTable('SuperClass')->getOption('subclasses');

0 голосов
/ 04 марта 2010

Существуют ли прямые функции, такие как Doctrine getSubclasses или PHP get_children_of? Не то чтобы я сталкивался в Doctrine или PHP. Наиболее близким из известных мне является PHP-функция is_subclass , которую вы могли бы использовать при переборе всех возможных классов.

Ваши подклассы значительно отличаются от вашей основной модели? Я вижу только один вариант столбца в ваших примерах выше, но я предполагаю, что это было только для краткости.

Я понимаю привлекательность структуры, которую вы пытаетесь, но также кажется, что в долгосрочной перспективе это может быть невероятной болью. Можно ли вместо этого создать отдельную модель VehicleCategory, которая ссылается на себя, чтобы обеспечить вложенную структуру, и тогда ваш Vehicles может принадлежать к этим категориям? Это будет иметь Rennfahrzeuge в качестве категории верхнего уровня, а Tourenwagen и Sonstige будет категорией с родителем Rennfahrzeuge с Vehicles всем трем. Если у вас не было большого количества вариаций полей в ваших дочерних моделях, вы можете включить все пользовательские поля в модель Vehicles и отображать / устанавливать их только в подходящее время.

Просто некоторые мысли, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...