2015-04-23 2 views
0

Я хочу динамически менять подключение к базе данных, я преуспел в codeigniter 2.2.0, но не в версии 3.0.Codeigniter 3.0 - Невозможно изменить подключение к базе данных динамически

Вот мой код:

public function index(){ 
     $this->load->model('compte_model','compte'); 
     $this->load->model('utilisateur_model','utilisateur'); 
     $this->load->helper('database_helper'); 

     //Getting the database where to connect from the principale database 
     $compte = $this->compte->get_by('nom',$this->input->get('nom')); 
     $bdd = $compte->bdd_principale; 

     //Get the new configuration 
     $newDBB = getGroupName($bdd); 
     $this->load->database($newDBB,TRUE); 

     //Made a query in the second database but it doesn't work 
     $users = $this->utilisateur->get_all(); 

     return $users; 
    } 

Вот вспомогательная функция:

function getGroupName($bdd){ 
    $config['hostname'] = "localhost"; 
    $config['username'] = "root"; 
    $config['password'] = ""; 
    $config['database'] = $bdd; 
    $config['dbdriver'] = "mysql"; 
    $config['dbprefix'] = ""; 
    $config['pconnect'] = TRUE; 
    $config['db_debug'] = TRUE; 
    $config['cache_on'] = FALSE; 
    $config['cachedir'] = ""; 
    $config['char_set'] = "utf8"; 
    $config['dbcollat'] = "utf8_general_ci";  

    return $config; 
} 
+2

Да, потому что вы все равно будете ссылаться на исходное соединение БД везде, где вы используете $ this-> db ... Я настоятельно рекомендую вам прочитать руководство по этому http://www.codeigniter.com /user_guide/database/connecting.html – TimBrownlaw

ответ

1

После некоторых тестов, я нашел решение:

  • Прежде всего, модель во второй базе данных необходимо загрузить после изменения конфигурации базы данных.
  • Во-вторых, мы должны отправить параметры базы данных, как FALSE для возвращаемого значения и TRUE для query_builder.

Наконец, код будет выглядеть следующим образом:

public function index_get(){ 
     $this->load->model('compte_model','compte'); 
     $this->load->helper('database_helper'); 

     $compte = $this->compte->get_by('nom',$this->input->get('nom')); 
     $bdd = $compte->bdd_principale; 

     //Get the new configuration 
     $newDBB = getGroupName($bdd); 
     $this->load->database($newDBB,FALSE,TRUE); 

     $this->load->model('utilisateur_model','utilisateur'); 

     $users = $this->utilisateur->get_all(); 

     return $users; 
    } 

Причина отправить эти параметры, чтобы изменить '> DB $ this-' экземпляр.

Смежные вопросы