Переключение баз данных в CodeIgniter - PullRequest
1 голос
/ 29 сентября 2011

Извините, если это настоящий вопрос новичка (также новичок в php), но я не могу понять это из документов:

Я хочу использовать базу данных по умолчанию, если я неничего особенного, и это прекрасно работает, используя $ this-> db со следующей конфигурацией:

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
$db['default']['database'] = 'ion_auth';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['visitorsDB']['hostname'] = 'localhost';
$db['visitorsDB']['username'] = 'root';
$db['visitorsDB']['password'] = 'root';
$db['visitorsDB']['database'] = 'visitorsDB';
$db['visitorsDB']['dbdriver'] = 'mysql';
$db['visitorsDB']['dbprefix'] = '';
$db['visitorsDB']['pconnect'] = TRUE;
$db['visitorsDB']['db_debug'] = TRUE;
$db['visitorsDB']['cache_on'] = FALSE;
$db['visitorsDB']['cachedir'] = '';
$db['visitorsDB']['char_set'] = 'utf8';
$db['visitorsDB']['dbcollat'] = 'utf8_general_ci';
$db['visitorsDB']['swap_pre'] = '';
$db['visitorsDB']['autoinit'] = TRUE;
$db['visitorsDB']['stricton'] = FALSE;

Но затем я хочу использовать вторую базу данных в одной из моих моделей, поэтому я попробовал это:

function __contruct() {
      parent::__construct();
       $this->db =  $this->load->database('visitorsDB', TRUE);
   }

   public function getAllVisitors($paramArr) {
       //$this->db =  $this->load->database('visitorsDB', TRUE);

Но это не работает.Только если я раскомментирую последнюю строку, чтобы загрузить базу данных в сам метод, она будет работать.Я не понимаю почему.Я также попытался объявить новую переменную класса в начале класса - private $ myDB;- и затем создать его экземпляр в конструкторе - $ myDB = $ this-> load-> database ('membersDB', TRUE);

Но это тоже не сработало.Так как же я могу переключить базу данных для всей модели?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2015

при изменении логина пользователя с базой данных

private $db;

function __construct() {
  parent::__construct();

  if($this->session->userdata('username') == "swaroop")
        $this->db = $this->load->database('visitorsDB', TRUE);
    else
        $this->db = $this->load->database('default', TRUE);
}
1 голос
/ 29 сентября 2011

Я бы не рекомендовал выбирать вторую базу данных, перезаписывая $this->db.Просто добавьте свойство для вашей другой базы данных в нужной вам модели и получите к нему доступ через это.В вашей модели сделайте следующее:

private $myDB;

function __construct() {
    parent::__construct();
    $this->myDB = $this->load->database('visitorsDB', TRUE);
}

function getAllVisitors() {
    return $this->myDB->someMethod(); // Or use active record, etc...
}

Я знаю, что в своем вопросе вы сказали, что сделали что-то подобное, но я не уверен, правильно ли вы это сделали.Это был бы правильный способ сделать это, и я не понимаю, почему это не сработало бы, если бы это было сделано таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...