2009-04-09 52 views
3

我使用Propel作为我的Symfony项目的DAL。我似乎无法让我的应用程序跨两个或更多数据库工作。在Symfony中支持多个数据库

这里是我的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 

而这里的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 

当我打电话php symfony propel-build-model,只有db1产生,db2不是。

任何想法如何解决这个问题?

回答

6

I got this issue working!最重要的是你必须根据%dbname%.schema.yml命名你的模式。通过这种方式,Symfony将能够将ymls分配给正确的数据库。

+2

这是坏驴。谢谢你的提示! – 2009-04-09 14:04:15

1

而且运行任务时,你应该指定例如连接:

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

这为我工作,希望它帮助。

+0

你好,我试过你的建议---但是不行。 – Graviton 2009-08-23 11:13:04

1

您还可以使用Propel::getConnection('db2')来手动检索连接。

请记住,您所谓的“db1”,“db2”是连接名称。您可以通过各种登录/权限(如只读等)连接到同一个数据库。

它非常适合测试目的:您可以使用具有不同数据库的相同连接名称进行测试。没有办法让你的生产数据库崩溃:)