2010-05-30 20 views
6

Actualmente estoy usando solo una base de datos con Zend Framework, pero ahora tengo que agregar UNA MÁS.Zend Framework bases de datos múltiples

Estoy usando este código en este 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); 
} 

¿Qué código necesito para escribir con el fin de utilizar una base de datos MAS; y cómo lo haré referencia, cuando necesite hacer algunas consultas o más ...

+1

Echa un vistazo a este artículo para obtener algunas ideas: http: //www.amazium .com/blog/zendapplication-multiple-databases – nuqqsa

+0

Si una de las respuestas te ayudó a Uffo, debes marcarla como aceptada ... – Sonny

Respuesta

2

En mi situación, tengo una base de datos 'central' que carga información del cliente, incluida la información de conexión de la base de datos del cliente. La configuración de conexión del núcleo está en el application.ini. Todo el código a continuación está en mi arranque.

Cargando conexión 'núcleo' (no definido como predeterminado en ini):

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

vez realizados los ajustes se cargan desde la base de datos 'núcleo' en el registro:

$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

lugar algo así como en su 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

Creo que te ayudará

En archivo 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 

de archivo de arranque

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); 
} 

más Descripción de http://www.tricksofit.com/2013/10/multiple-database-zend-framework

Cuestiones relacionadas