Dottrina eredità. C'è un modo semplice per ottenere tutti i bambini classi / tavoli per il loro utilizzo in un campo di selezione in forme di symfony?
-
23-09-2019 - |
Domanda
Ho appena iniziato a utilizzare symfony 1.4 e dottrina. (Usato 1,0-1,2 + Propel molto prima).
ho pensato di dare Dottrina una prova, a causa della rapida ed enorme Processo di sviluppo in passato.
Grazie alla jwage ;-)
Im usando Table Inheritance. Questa è una piccola parte della mia 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 ora pensando di utilizzare un modo semplice per creare una giusta forma.
L'utente deve disporre di selezionare campi nella parte superiore del modulo (come te Potete vedere qui: http://msm-esv.dyndns.org/frontend_dev. php / fahrzeuge / inserto )
Si consiglia di scegliere la "classe padre", come Rennfahrzeuge o Karts e presto.
Dopo che l'utente deve scegliere la classe bambino come Tourenwagen o Sonstige.
Poi la pagina deve ricaricare e visualizzare la forma giusta.
C'è qualche funzione in Dottrina per ottenere le classi inheritated / bambino per loro la visualizzazione nel secondo campo di selezione?
(per es. Rennfahrzeuge ha Tourenwagen, .., ..., Sonstige e Karts ha TonyKart, ..., ..., Sonstige)
Dopo che ho potuto creare dinamicamente la classe form assegnato come:
$chooseMode = $request->getParameter('chooseMode').'Form';
$modeFormClass = new $chooseMode();
o ho pensato sufficiente impostare il modello giusto nel genitore classe di form.
Quali sono i tuoi pensieri? Vorrei davvero apprezzare tutti i suggerimenti e aiutare :-)
Grazie mille,
Marco
Soluzione
Ci sono funzioni dirette come ad esempio un getSubclasses
dottrina o un get_children_of
PHP? Non che io abbia mai incontrato, in Dottrina o PHP. Il più vicino che so è la funzione PHP is_subclass che si potrebbe usare, mentre l'iterazione attraverso tutte le possibili classi.
I tuoi sottoclassi variano significativamente dal modello principale? Vedo unica variazione una colonna nei tuoi esempi di cui sopra, ma sto cercando di indovinare che era solo per brevità.
Mi rendo conto che il fascino della struttura si sta cercando, ma sembra anche come potrebbe essere un dolore incredibile nel lungo periodo. Sarebbe possibile invece impostare un modello VehicleCategory
separata che si fa riferimento per fornire una struttura annidata e poi il tuo Vehicles
potrebbe appartenere a quelle categorie? Ciò avrebbe Rennfahrzeuge come una categoria di livello superiore e Tourenwagen e Sonstige sarebbe categorie con un genitore di Rennfahrzeuge con Vehicles
appartenenti a tutti e tre. Se non si dispone di troppo variazione del campo nei modelli bambino si potrebbe includere tutti i campi personalizzati nel modello Vehicles
e solo display / metterli al momento opportuno.
Solo alcuni pensieri, la speranza che aiuta.
Altri suggerimenti
Se hai bisogno di trovare le sottoclassi di un record dottrina si potrebbe usare
$yourSuperObject->getTable()->getOption('subclasses')
o
Doctrine::getTable('SuperClass')->getOption('subclasses');