2016-12-24 5 views
1

Ich bin derzeit Entwickler einer Multi-Tenant-Anwendung, in der es eine "Master" -Datenbank gibt, die Kundendaten enthält und auch als Vorlage verwendet wird, also mit kopiert wird ein anderer Name für jeden neuen Kunden, um seine Daten zu halten.Multi-Tenant-Anwendung mit Propel ORM

<?xml version="1.0" encoding="UTF-8"?> 
<database name="master_db" defaultIdMethod="native"> 
    <!-- here are tables' definitions --> 
</database> 

Ist es möglich, die gleiche XML-Datei zu verwenden, um die Verbindungen alle zu all den Kunden zu modellieren:

Wenn Propel ORM in PHP verwendet, wird die Modellkonfiguration in einer XML-Datei wie folgt strukturiert getan Datenbanken, oder würde ich für jeden eine separate Datei benötigen, die bis auf den Datenbanknamen vollständig identisch ist?

Da meine Frage hat als potenzielles Duplikat this one markiert, die ich vorher gefunden hatte, Ich mag würde erklären, warum es anders:

  • in diesem Fall die Anzahl der Datenbanken wird Laufe der Zeit ändern, während in dieser Frage es fest ist
  • in diesem Fall alle Datenbanken und alle Tabellen in jeder, haben genau die gleiche Struktur
  • ich nicht wollen verschiedene Klassen für jeden Kunden, sondern ein einzelner Satz von Modellklassen, die die zuletzt gewählte Datenbank
+0

Mögliche Duplikat [Propel Multiple Datenbankmodellierung] (http://stackoverflow.com/questions/11270008/drive-multiple-database-modeling) – Dez

+0

@Dez Ich hatte das schon mal gesehen, ich glaube nicht, dass meine Frage wirklich eine Täuschung ist. –

Antwort

1

Was Sie verlangen klingt ein guter Kandidat für die XML Einbeziehungen in den Konfigurationsdateien abfragt:

die master-db.xml Datei

<?xml version="1.0" encoding="UTF-8"?> 
<database name="master_db" defaultIdMethod="native"> 
    <!-- here are tables' definitions --> 
</database> 

neben der propel.xml Datei

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <propel> 
    <database name="blueberryshoechamp_db" defaultIdMethod="native"> 
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" 
        href="master-db.xml" 
        xpointer="xpointer(/database/*)" 
        /> 
    </database> 
    ... 

Dies schließt dann alle untergeordneten Elemente des Dokumentelements database aus der Datei master-db.xml ein.

Nur das Mischen, das Sie suchen.

Die gute Nachricht: Propel2 unterstützt nun diese wurde die Funktion in eingeführt:

+0

Wenn dies umgesetzt wird, wäre es wirklich das, wonach ich suche! Dies bestätigt auch, dass ich jetzt die gesamte XML-Datei kopieren müsste, oder? –

+0

Ja, aber Sie könnten den Prozess externalisieren und das Dokument proprive.xml mit etwas PHP-Skript generalisieren. – hakre

+1

@MatteoTassinari: Dies ist jetzt in Propel2 gelandet, https://github.com/propelmorm/Propel2/commit/b311676a95eef3dacc229424e73be04992dd7b78 – hakre