2009-04-09 11 views
3

Ich verwende Propel als meine DAL für mein Symfony-Projekt. Ich kann meine Bewerbung anscheinend nicht auf zwei oder mehr Datenbanken anwenden.Unterstützung mehrerer Datenbanken in Symfony

Hier ist meine schema.yml:

db1: 
    lkp_User: 
    pk_User:      { type: integer, required: true, primaryKey: true, autoIncrement: true } 
    UserName:     { type: varchar(45), required: true } 
    Password:     longvarchar 
    _uniques: 
     Unique:     [ UserName ] 

db2: 
    tesco: 
    Id:     { type: integer, required: true, primaryKey: true, autoIncrement: true } 
    Name:    { type: varchar(45), required: true } 
    Description:   longvarchar 

Und hier ist der databases.yml:

dev: 
    db1: 
    param: 
     classname: DebugPDO 
test: 
    db1: 
    param: 
     classname: DebugPDO 
all: 
    db1: 
    class: sfPropelDatabase 
    param: 
     classname: PropelPDO 
     dsn: 'mysql:dbname=bpodb;host=localhost' #where the db is located 
     username: root 
     password: #pass 
     encoding: utf8 
     persistent: true 
     pooling: true 


    db2: 
    class: sfPropelDatabase 
    param: 
     classname: PropelPDO 
     dsn: 'mysql:dbname=mystore2;host=localhost' #where the db is located 
     username: root 
     password: #pass 
     encoding: utf8 
     persistent: true 
     pooling: true 

Als ich php symfony propel-build-model nennen, nur db1 erzeugt wird, db2 nicht.

Haben Sie eine Idee, wie Sie dieses Problem beheben können?

Antwort

6

I got this issue working! Das Wichtigste ist, dass Sie Ihr Schema nach% dbname% .schema.yml benennen müssen. Auf diese Weise kann Symfony die ymls der richtigen Datenbank zuordnen.

+2

Das ist böser Arsch. Danke für den Tipp! –

1

Auch wenn die Aufgabe ausgeführt wird, sollten Sie die Verbindung zum Beispiel angeben:

symfony propel:build-all-load --connection=my_connection 

Das ist für mich gearbeitet, hoffe, es hilft.

+0

Hallo, ich habe deinen Vorschlag ausprobiert --- funktioniert aber nicht .. – Graviton

1

Sie können auch Propel::getConnection('db2') verwenden, um eine Verbindung manuell abzurufen.

Denken Sie nur daran, dass das, was Sie "db1", "db2" nennen, die Verbindungsnamen sind. Sie können mehrere Verbindungen zu einer Datenbank mit verschiedenen Login/Berechtigungen (wie nur Lesen etc.) haben.

Es ist sehr gut für Testzwecke: Sie können es mit dem gleichen Verbindungsnamen mit einer anderen Datenbank tun. Keine Möglichkeit, Ihre Produktionsdatenbank damit zu stürzen :)

Verwandte Themen