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?

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

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

È stato utile?

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');

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top