Codeigniter - несколько соединений с базой данных - PullRequest
1 голос
/ 01 октября 2011

У меня проблема с несколькими соединениями в БД на Codeigniter. В моем файле database.php я настроил две базы данных.

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

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

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

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

Но в любое время кодигнитер подключается к cms. Когда я удаляю

$active_group = 'cms';
$active_record = FALSE;

Codeingiter выдает ошибку. Когда я попробовал это

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

function test()
{
      $query  = "SELECT * FROM cms_modules";
      $result = $db2->db->query($query);
      return $db2->result();
}

выдает ошибку. Вариабеле db2 не существует. Я просто хочу выбрать в каждой модели, к которой я хочу подключиться. Но это не работает. Кто-нибудь знает, как я могу работать с различными базами данных у моделей.

Большое спасибо !!

Ответы [ 4 ]

5 голосов
/ 01 октября 2011

Вы должны сохранить переменную $ db2 как поле класса. Вы можете получить доступ к $ this-> db2 ...

1 голос
/ 17 декабря 2014

Вы должны изменить класс db2

    $query  = "SELECT * FROM cms_modules";
    $result = $this->db2->query($query);
    return result();
1 голос
/ 07 февраля 2014

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

$this->db2 = $this->load->database('hazeleger',true);
1 голос
/ 01 октября 2011

Это происходит потому, что вы, скорее всего, указали в /application/config/autoload.php, что библиотека базы данных автоматически загружается / создается.

Откройте autoload.php и найдите следующую строку:

 $autoload['libraries'] = array('database');

Удалите «database» из массива и сохраните.Теперь он должен работать в ваших контроллерах, как задумано.

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