2009-12-10 2 views
5

Wenn ich Doctrine zum Generieren von Klassen aus Yaml/db verwende, erweitert jede Basisklasse (die die Tabellendefinition enthält) die Doctrine_Record-Klasse.Wie man Doctrine-Modelle/-Klassen erzeugt, die eine benutzerdefinierte Datensatzklasse erweitern

Da meine App einen Master und (mehrere) Slave-Db-Server verwendet, muss ich in der Lage sein, die Basisklassen meine benutzerdefinierte Datensatzklasse zu erweitern, um Schreibvorgänge zum Master-DB-Server zu zwingen (wie beschrieben here). Wenn ich jedoch die Basisklasse manuell ändere, verliere ich sie wieder, wenn ich meine Klassen aus Yaml/db mit Doctrine neu generiere.

Ich muss einen Weg finden, Doctrine zu sagen, meine eigene Base-Klasse zu erweitern, oder eine andere Lösung für eine Master/Slave-Db-Konfiguration mit Doctrine zu finden.

Beispiel generierte Modell:

abstract class My_Base_User extends Doctrine_Record 
{ 

aber ich brauche es automatisch erzeugt werden:

abstract class My_Base_User extends My_Record 
{ 

Ich verwende Lehre 1.2.1 in einer neuen Zend Framework 1.9.6 Anwendung, wenn es macht einen Unterschied.

+2

Verwandten: Wenn Sie dies versuchen, in einem Symfony zu tun Projekt, siehe http://stackoverflow.com/questions/4392713/cant-change-model-builder-options –

Antwort

10

Typisch, sobald ich die Frage stelle, schaffe ich es, die Antwort zu finden. Ich zeichne es hier auf, falls jemand das gleiche Problem hat.

Sie können den Parameter 'baseClassName' in die generateModels * -Methoden übergeben und Doctrine wird dies als Basis-Datensatzklasse verwenden.

Beispiele:

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

oder mit Cli:

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

$cli = new Doctrine_Cli($options); 
1

Perfect, danke! Das ist cool, weil ich Doktrin Optionen aus meiner Application.ini in meinem Zend Framework Projekt einer ähnlichen Version (1.9.x) ergreife. Jetzt kann ich einfach die ini ändern, um den Baseclass hinzufügen wie folgt:

doctrine.generate_models_options.baseClassName = "BaseRecord" 

Nochmals vielen Dank für das Speichern von mir Zeit, dies herauszufinden, auf meine eigenen :)

Verwandte Themen