2013-07-18 15 views
5

Ho configurato correttamente un secondo database con codeigniter e sono riuscito a creare una tabella. Il problema è ora che tutte le linee di codice precedentemente esistenti che utilizzavano $this->db ora utilizzano il secondo database, quindi in modo naturale viene visualizzato un errore. Lasciatemi spiegare un po 'di più:CodeIgniter Utilizzo di più database senza modificare il codice esistente per il primo database

Io uso la libreria di migrazione di codeigniter e in una nuova migrazione, creo il database con dbforge come tale $this->dbforge->create_database('website_store'). Fin qui tutto bene, quindi mi collego a questo database usando $DB2 = $this->load->database('store', TRUE); e creo una tabella. Tutto va bene anche qui.

Poi le estremità di migrazione e CodeIgniter cerca di aggiornare la tabella di migrazione per spingere l'ultima versione, ma guarda nel store database anziché il database predefinito, in modo che schiocca questo errore:

Table 'website_store.migrations' doesn't exist 
UPDATE `migrations` SET `version` = 45 

Speriamo che qualcuno sa sull'utilizzo di più database e della libreria di migrazione. A proposito, nel file database.php, è impostato per utilizzare il database predefinito: $active_group = "default";, non il database del negozio, quindi dovrebbe funzionare. Sembra che la libreria di migrazione veda che c'è già un database caricato, si sente pigro e usa quello.

NOTA: Sembra che questi ragazzi avevano problemi simili che hanno risolto impostando 'pconnect' a 'false', ma sarebbe bello mantenere una connessione a entrambi database:

Convenient Way to Load Multiple Databases in Code Igniter

Error Using Multiple Database In CodeIgniter

+0

Ok, sono andato con la soluzione "pconnect" a "false". Non è quello che volevo fare, ma funziona. – Marco

risposta

1

In CI io ci siamo occupati più database utilizzando:

function readFromOtherDB(){ 
    $config = array(
     'hostname' => "XXX", 
     'username' => "XXX", 
     'password' => "XXX", 
     'database' => "XXX", 
     'dbdriver' => "mysql", 
     'dbprefix' => "", 
     'pconnect' => FALSE, 
     'db_debug' => TRUE, 
     'cache_on' => FALSE, 
     'cachedir' => "", 
     'char_set' => "utf8", 
     'dbcollat' => "utf8_general_ci" 
    ); 

    $otherDb = $this->ci->load->database($config, true); 

    $query = $otherDb->get_where('users', array('email' => $_email)); 

    $otherDb->close(); 
} 
+0

Non penso che la funzione close() sia necessaria quando pconnect è impostato su false. Tuttavia, stavo cercando un modo per farlo senza impostare pconnect = false – Marco

Problemi correlati