herencia doctrina. ¿Hay una manera fácil de obtener todos los niños clases / tablas para usarlas en un campo de selección de formas de Symfony?

StackOverflow https://stackoverflow.com/questions/2346742

Pregunta

Me acaba de empezar a utilizar Symfony 1.4 y Doctrina. (Se utiliza 1,0-1,2 + Propel mucho antes).

Me pareció dar Doctrina una oportunidad, debido a la rápida y enorme proceso de desarrollo en el pasado.

Gracias a jwage ;-)

Im usando herencia de tabla. Esta es una pequeña parte de mi 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 

Im ahora pensando en usar una forma sencilla de crear una forma correcta.

El usuario debe tener para seleccionar campos en la parte superior del formulario (como se puede ver aquí: http://msm-esv.dyndns.org/frontend_dev. php / Fahrzeuge / inserto )

Usted debe elegir la "clase padre" como Rennfahrzeuge o karts y pronto.

Después de que el usuario debe elegir la clase o niño como Tourenwagen Sonstige.

A continuación, la página debe cargar y mostrar la forma correcta.

¿Hay alguna función en la Doctrina de conseguir las clases inheritated / niño para mostrarlos en el segundo campo de selección?

(por ejemplo. Rennfahrzeuge tiene Tourenwagen, .., ..., Sonstige y karts tiene TonyKart, ..., ..., Sonstige)

Después de que podía crear dinámicamente la clase de formulario asignado como:

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

o he pensado sencillamente en ajustar el modelo correcto de los padres clase de formulario.

¿Cuáles son sus pensamientos? Realmente agradecería cualquier sugerencia y ayuda :-)

Muchas gracias,

Marco

¿Fue útil?

Solución

¿Hay funciones directas, como una doctrina o una getSubclasses get_children_of PHP? No es que me he encontrado, en Doctrina o PHP. Lo más cerca que sé acerca de la función de PHP es is_subclass que se podría usar mientras iteración a través de todas sus posibles clases.

Haga su subclases varían significativamente de su modelo principal? Sólo veo una columna variación en sus ejemplos anteriores, pero supongo que era sólo por razones de brevedad.

Me da cuenta de la apelación de la estructura que está intentando pero también parece que podría ser un dolor increíble en el largo plazo. ¿Sería posible que en vez establecido un modelo VehicleCategory independiente que hace referencia a sí mismo para proporcionar una estructura anidada y luego su Vehicles podría pertenecer a esas categorías? Esto tendría Rennfahrzeuge como una categoría de nivel superior y Tourenwagen y Sonstige serían categorías con una matriz de Rennfahrzeuge con Vehicles pertenecientes a los tres. Si usted no tuvo variación del campo demasiado en sus modelos niño que podría incluir todos los campos personalizados en el modelo Vehicles y sólo se ven / los puso en los momentos adecuados.

A sólo algunas ideas, espero que ayude.

Otros consejos

Si es necesario encontrar las subclases de un Registro Doctrina que podría utilizar
$yourSuperObject->getTable()->getOption('subclasses') o
Doctrine::getTable('SuperClass')->getOption('subclasses');

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top