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?
-
23-09-2019 - |
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
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');