Hacer una segunda conexión a una base de datos externa

Uso la conexión clásica, que se creó en el arranque al leer los parámetros del archivo application.ini. Me gustaría usar más bases de datos externas, pero no puedo leerlas desde application.ini. Prefiero leer los parámetros de la base de datos principal (qué base de datos externa es, depende del sitio web). Entonces, ¿cómo hacer una conexión efectiva en el modelo? Ahora configuro esa conexión cada vez que necesito usarla. Y cuando necesito usar la base de datos principal, es necesario volver a hacer la conexión. Es una solución muy poco efectiva.

function joinClientDB($id)
{
    $web = $this->getById($id);
    $dbSettings = array();
    $dbSettings['host'] = $web['web_dbHost'];
    $dbSettings['username'] = $web['web_dbUsername'];
    $dbSettings['password'] = $web['web_dbPassword'];
    $dbSettings['dbname'] = $web['web_dbName'];
    $this->_db = Zend_Db::factory('pdo_mysql', $dbSettings);
    $this->_db->query('SET CHARACTER SET ' . $web['web_dbCharset']);
}

function joinDefaultDb()
{
    $this->_db = Zend_Registry::get('db');
}

¿Alguien tiene una solución fácil para mí?

preguntado el 22 de mayo de 12 a las 16:05

Parece que su configuración permitirá una cantidad ilimitada de configuraciones de conexión de base de datos. Con ese tipo de arquitectura, sus opciones con lo que ZF puede hacer serán limitadas. Lo mejor que probablemente pueda esperar es crear un complemento que registre los parámetros DB correctos con cada solicitud. -

Teóricamente sí pero prácticamente no. Necesito conexiones, primero principal (que cargo con parámetros de application.ini) y segundo adicional, qué parámetros tengo que obtener de esa base de datos principal. Idealmente, haré singleton en primer lugar para obtener parámetros con un modelo apropiado. No sé si es una buena solución. ¿Qué tal esa solución con el complemento? -

1 Respuestas

Sugeriría usar el complemento Zend MULTI DB. Agregue a su application.ini todas las conexiones de base de datos:

; Database ONE
resources.multidb.test.adapter = 
resources.multidb.test.dbname = 
resources.multidb.test.username = 
resources.multidb.test.password = ""
resources.multidb.test.host = "your.local.host"
resources.multidb.test.default = true

; Database TWO
resources.multidb.live.adapter = 
resources.multidb.live.dbname = 
resources.multidb.live.username = 
resources.multidb.live.password = ""
resources.multidb.live.host = "your.live.host.com"

Y ahora podría volver a ponerlos en su registro (bootstrap.php):

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

    $testDB = $resource->getDb('test');
    $liveDB = $resource->getDb('live'); 

    Zend_Registry::set('DB_TEST', $testDB);
    Zend_Registry::set('DB_LIVE', $liveDB);
}

contestado el 22 de mayo de 12 a las 17:05

Necesito una segunda base de datos (externa) que se conecte con los parámetros que se almacenan en la base de datos principal (se escribió arriba). - tomar

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.