2010-05-30 2 views
6

Attualmente sto usando un solo database con Zend Framework, ma ora devo aggiungere un altro.Zend Framework più database

Sto usando questo codice in questo momento:

public static function setupDatabase() 
{ 
    $config = self::$registry->configuration; 
    $db = Zend_Db::factory($config->db->adapter, $config->db->toArray()); 
    $db->query("SET NAMES 'utf8'"); 
    self::$registry->database = $db; 
    Zend_Db_Table::setDefaultAdapter($db); 
} 

Quale codice devo scrivere per utilizzare ONE MORE banca dati; e come farò riferimento, quando ho bisogno di fare alcune domande o così ..

+1

Date un'occhiata a questo articolo per alcune idee: http: //www.amazium .com/blog/zendapplication-multiple-databases – nuqqsa

+0

Se una delle risposte ti ha aiutato Uffo, dovresti contrassegnarlo come accettato ... – Sonny

risposta

2

Nella mia situazione, ho un database "principale" che carica le informazioni sui clienti, incluse le informazioni sulla connessione al database del cliente. Le impostazioni di connessione principali sono nello application.ini. Tutto il codice qui sotto è nel mio bootstrap.

Caricamento connessione 'core' (non impostato sul valore predefinito in ini):

$db_core = $this->getPluginResource('db')->getDbAdapter(); 
$db_core->setFetchMode(Zend_Db::FETCH_OBJ); 
Zend_Registry::set('db_core', $db_core); 

Dopo impostazioni vengono caricati dal database 'core' nel Registro di sistema:

$settings = Zend_Registry::get('settings'); 
$db = Zend_Db::factory(
    $settings->db_adapter, 
    array(
     'host' => $settings->db_host, 
     'username' => $settings->db_user, 
     'password' => $settings->db_pass, 
     'dbname' => $settings->db_name, 
    ) 
); 
$db->setFetchMode(Zend_Db::FETCH_OBJ); 
Zend_Db_Table::setDefaultAdapter($db); 
7

posto qualcosa di simile nella vostra application.ini

[production] 

    resources.multidb.db1.adapter = "pdo_mysql" 

    resources.multidb.db1.host = "localhost" 

    resources.multidb.db1.username = "webuser" 

    resources.multidb.db1.password = "XXXX" 

    resources.multidb.db1.dbname = "db1" 



    resources.multidb.db2.adapter = "pdo_pgsql" 

    resources.multidb.db2.host = "example.com" 

    resources.multidb.db2.username = "dba" 

    resources.multidb.db2.password = "notthatpublic" 

    resources.multidb.db2.dbname = "db2" 

    resources.multidb.db2.default = true 
0

Penso che ti aiuterà

Nel file di applocation.ini

resources.multidb.db1.adapter = "pdo_mysql" 
resources.multidb.db1.host = "localhost" 
resources.multidb.db1.username = "root" 
resources.multidb.db1.password = "" 
resources.multidb.db1.dbname = "db1" 
resources.multidb.db1.charset = "utf8" 
resources.multidb.db1.driver_options.1002 = "SET NAMES utf8" 
resources.multidb.db1.default = true 

resources.multidb.db2.adapter = "pdo_mysql" 
resources.multidb.db2.host = "localhost" 
resources.multidb.db2.username = "root" 
resources.multidb.db2.password = "" 
resources.multidb.db2.dbname = "db2" 
resources.multidb.db2.charset = "utf8" 
resources.multidb.db2.driver_options.1002 = "SET NAMES utf8" 
resources.multidb.db2.default = false 

nel file di bootstrap

protected function _initDbAdaptersToRegistry() 
{ 
    $this->bootstrap('multidb'); 
    $resource = $this->getPluginResource('multidb'); 

    $Adapter1 = $resource->getDb('db1'); 
    $Adapter2 = $resource->getDb('db2');  
    Zend_Registry::set('db1', $Adapter1); 
    Zend_Registry::set('db2',$Adapter2); 
} 

maggiori descrizione su http://www.tricksofit.com/2013/10/multiple-database-zend-framework