2014-09-04 128 views
2

我最近開始使用Phalcon PHP框架,有一件事讓我很困惑。Phalcon db連接到同一主機上的多個數據庫

如何設置$di在同一主機上使用多個數據庫?例如如何使這項工作查詢

SELECT * FROM 
DB1.TABLENAME_1 AS t1 
LEFT OUTER JOIN DB2.TABLENAME_2 AS t2 ON t1.some_id = t2.other_id 

我已經註冊連接DB1,我已經加載的所有模式,可以輕鬆地從任何型號訪問數據,但是當我從1分貝試圖JOIN表從第二個數據庫表我收到提示模式「TABLENAME_2」無法加載屬於DB2

這裏是我的$di

$di->setShared('db', function() use ($config) { 
    return new DbAdapter(array(
     'host' => $config->database->host, 
     'username' => $config->database->username, 
     'password' => $config->database->password, 
     'dbname' => $config->database->dbname, 
     'options' => array(
      PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'" 
     ) 
    )); 
}); 
+0

連接的用戶是否具有對這兩個數據庫的讀取權限? – 2014-09-04 13:33:11

+0

是的,我也創建了一個模型'TABLENAME_2',Phalcon試圖用'DB1'而不是'DB2'來映射這個模型。 – 2014-09-04 13:49:51

+1

只需在DI中添加兩個數據庫連接,然後在模型中設置連接服務: https://github.com/phalcon/cphalcon/issues/244 – Phantom 2014-09-04 16:14:02

回答

1

來處理它簡單的方法:你可以添加三行代碼你的模型,例如我有2 DB(DB1,DB2),DB1是初級db和這個配置,那麼在service.php設置:

//service.php : 
$di->set('db', function() use ($config) { 
    return new DbAdapter(array(
     'host' => "localhost", 
     'username' => "root", 
     'password' => $config->database->password, 
     'dbname' => "DB1", 
     'charset' => "utf8" 
    )); 
}); 

//declare DB2 as well as: 
$di->set('DB2', function() use ($config) { 
    return new DbAdapter(array(
     'host' => "localhost", 
     'username' => "root", 
     'password' => $config->database->password, 
     'dbname' => "DB1", 
     'charset' => "utf8" 
    )); 
}); 

和DB2是要使用和例如此涉及兩個表輔助數據庫(T1,T2 ),併爲它的任何表,你生成phalcon devTools一個model.php(T1.php,T2.php),使用這個表,你應該添加三行代碼,然後聲明T1.php類:

//this is your model (T1.php) 
class Events extends \Phalcon\Mvc\Model 
{ 

//you can connect to DB2 database 
public function initialize() 
{ 
    $this->setConnectionService('DB2'); 
} 
...