php - recomendaciones - Codeigniter: la mejor forma de usar dos bases de datos diferentes
porque se dañan las tablas en mysql (4)
¿Alguien conoce las mejores prácticas para usar 2 bases de datos diferentes en mi aplicación?
Necesito almacenar datos en ambas bases de datos que están ubicadas de forma diferente (host, nombre de usuario, contraseña, todo cambia).
Estoy planeando crear modelos como de costumbre, y en construir establecer el host db, nombre, pase, etc.
Bueno, me gustaría escribir aquí mi solución porque creo que he usado menos código:
en database.php configuré los grupos de bases de datos así que por ejemplo:
$database[''default''][''dbname''] = ''db1'';
$database[''second_db''][''dbname''] = ''db2'';
Luego, en los modelos, utilicé el constructor para cambiar a la base de datos que quiero usar así:
//use db1
function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database(''default'',true);
}
//use db2
function __construct()
{
// Call the Model constructor
parent::__construct();
$this->load->database(''second_db'',true);
}
si alguien quisiera mostrar más soluciones, ¡haga eso, por favor! Estos son solo mis dos centavos.
yo lei eso
$db[''default''][''pconnect''] = FALSE;
debe ser falso para que estas cosas funcionen Por favor corrígeme si estoy equivocado. Para TODAS las bases de datos múltiples que usa, tiene que estar desactivado. No sé si esta es una buena solución.
No estoy seguro si llamas a esto "la mejor" manera, pero una forma, como se describe en el tutorial, es esto,
en el archivo de la base de datos, tiene la configuración predeterminada, una parte de la cual es:
$db[''default''][''hostname''] = "localhost";
$db[''default''][''username''] = "user";
$db[''default''][''password''] = "database";
$db[''default''][''database''] = "db1";
ahora puede crear otro grupo, digamos que lo llamamos grupo1 y queremos que tenga todo lo mismo que la configuración predeterminada de la base de datos, excepto el nombre, para que pueda hacer
$db[''group1'']=$db[''default''];
$db[''group1''][''database'']="db2";
luego, cuando quieras usar la segunda base de datos, solo tienes que ir
$DB2 = $this->load->database(''group1'', TRUE);
y luego, en lugar de $this->db->foo()
, harás $DB2->foo()
alternativamente (como se sugiere en los comentarios de sbaaaang), puede hacer $this->db=$DB2;
para mantener todo igual
y puedes extender esto a múltiples grupos como este
$DB1 = $this->load->database(''group1'', TRUE);
$DB2 = $this->load->database(''group2'', TRUE);
...
$DBn = $this->load->database(''groupn'', TRUE);
Intenté esto, y funciona:
$db[''otherdb''] = array_merge($db[''primarydb''], array(
''database'' => ''otherdbname''
));