2009-12-10 5 views
5

Quando uso Doctrine per generare classi da Yaml/db ogni classe Base (che include la definizione della tabella) estende la classe Doctrine_Record.Come generare modelli/classi Doctrine che estendono una classe di record personalizzata

Poiché la mia app utilizza un server master e (più) slave DB, devo essere in grado di fare in modo che le classi Base estendano la mia classe di record personalizzata per forzare le scritture a passare al server master db (come descritto here). Tuttavia se cambio la classe base manualmente la perdo di nuovo quando rigenero le mie classi da Yaml/db usando Doctrine.

Ho bisogno di trovare un modo per dire a Doctrine di estendere la mia classe Base, o trovare una soluzione diversa a un setup db master/slave usando Doctrine.

Esempio modello generato:

abstract class My_Base_User extends Doctrine_Record 
{ 

Tuttavia ho bisogno di essere generato automaticamente come:

abstract class My_Base_User extends My_Record 
{ 

Sto usando Dottrina 1.2.1 in una nuova applicazione 1.9.6 Zend Framework se fa qualsiasi differenza

+2

correlati: se si sta cercando di fare questo in uno Symfony progetto, vedi http://stackoverflow.com/questions/4392713/cant-change-model-builder-options –

risposta

10

Tipico, non appena faccio la domanda riesco a trovare la risposta. Sto registrando qui nel caso in cui qualcun altro abbia lo stesso problema.

È possibile passare il parametro 'baseClassName' nei metodi generateModels * e Doctrine lo utilizzerà come classe di record Base.

Esempi:

Doctrine_Core::generateModelsFromDb('models', array('master'), array('generateTableClasses' => true, 'baseClassName' => 'My_Record')); 

o utilizzando Cli:

$options['generate_models_options'] = array(
'pearStyle'    => true, 
'baseClassPrefix'  => 'My_', 
'baseClassName'   => 'My_Record', 
'classPrefix'   => '', 
'classPrefixFiles'  => false, 
'generateTableClasses' => true, 
); 

$cli = new Doctrine_Cli($options); 
1

perfetto, grazie! Questo è interessante perché raccolgo le opzioni di doctrine dal mio application.ini nel mio progetto Zend Framework di una versione simile (1.9.x). Ora posso semplicemente modificare l'ini per aggiungere il NomeClasseBase in questo modo:

doctrine.generate_models_options.baseClassName = "BaseRecord" 

Grazie ancora per avermi salvato tempo per capire questo fuori da solo :)