2012-11-30 8 views
10

Ich habe einige Probleme mit der Einstellung von PropelORM, um mit mehreren Datenbanken zu arbeiten. Ich konnte in der Dokumentation nichts Nützliches finden.Propelorm v1 mehrere Datenbanken

  1. Generieren von Schemata aus mehreren Datenbanken

    Ich ziehe eine Änderung an Datenbankschema zuerst zu machen und dann laufen

    $ propel-gen . reverse 
    

    schema.xml zu bekommen. Was passiert, wenn mein System aus mehr als einer Datenbank besteht? Kann es mehrere Schemas generieren? Ich weiß aus der Dokumentation buildtime-conf.xml muss erstellt werden, aber es tut nichts für mich.

  2. generieren Klassen

    Sagen wir, ich blog.schema.xml und platform.schema.xml zu verschiedenen Schemata erstellt. Ist es möglich zu:

    1. haben Sie ein anderes Klassenpräfix für jedes Schema? In build.properties kann ich propel.classPrefix setzen, aber das wird global für jedes Schema funktionieren.

    2. Haben Sie für jedes Schema einen anderen Projektnamen? Wieder in der build.properties kann ich setzen propel.project und das wird ein bestimmtes Verzeichnis in Klassen Verzeichnis erstellen. Im Moment werden alle Klassen an denselben Ort gehen. Wenn ich denselben Tabellennamen in beiden Schemas verwende, überschreibt eine Klasse die andere.

Die Lösung, die ich auf meinem eigenen kommen kann, ist ein 2 verschiedene Verzeichnisse Setup für eine bestimmte Datenbank zu haben, aber ich würde elegantere Lösung bevorzugen.

+1

Diese Ressourcen könnten hilfreich sein: http://propelorm.org/cookbook/using-sql-schemas.html http://trac.propelorm.org/ticket/940 –

+0

Sie Frosty danken. Die Dokumentation ist klar, aber wenn ich anfange, den Richtlinien zu folgen, funktioniert alles anders. Das Handbuch sagt über proprive.schema.autoPrefix Parameter. Es gibt keine automatischen Präfix-Klassen für mich. Das einzige, was es für mich tut, ist, wenn proprive.schema.autoNamespace auf TRUE gesetzt ist, dann überschreibt es es auf FALSE (vielleicht nicht direkt, aber das ist das Ergebnis). –

+0

Pakete http://propelorm.org/cookbook/multi-component-data-model.html funktionieren auch nicht wie in der Dokumentation beschrieben. Es besagt, dass wenn Sie ein Paket auf der Ebene DATABASE setzen, es Dateien in classes/my_project/package_name erstellt, während es für mich nicht mein_project dir erstellt, sondern alle Pakete direkt in die Klasse gehen. Nur um klar zu sein habe ich die neueste Version von prop1 von git bekommen. –

Antwort

1

Können Sie die <database> Zeile aus Ihrem Schema veröffentlichen?

Solange Sie folgende Voraussetzungen erfüllt sein:

<database package="blog" name="blog" defaultIdMethod="native"> 

Innerhalb Ihrer blog.schema.xml sollte es ein neues Verzeichnis für Sie generieren. Wenn Sie die LazyLoad für Sie aufladen lassen, haben Sie recht, Sie bekommen Kollisionen, also habe ich manuell etwas an meine Tische in der schema.xml gestellt (was vielleicht nicht die effizienteste Sache ist, um Dinge zu handhaben).

Aber man kann so etwas tun:

  1. in blog.schema.xml:

    <table name="users" phpName="blogUsers" idMethod="native"> 
    
  2. in platform.schema.xml:

    <table name="users" phpName="platformUsers" idMethod="native"> 
    

Das hat gut für mich funktioniert.

Verwandte Themen