В реальных проектах CodeIgniter разработчикам необходимо работать с несколькими базами данных одновременно. Это представляет собой уникальный вызов для разработчиков. Поскольку это достаточно распространенная проблема, CodeIgniter предлагает для нее простое решение.
Чтобы использовать несколько соединений с базами данных в вашем проекте CodeIgniter, вам просто нужно создать несколько массивов конфигурации, которые упрощают работу с несколькими базами данных.
Массив конфигурации по умолчанию Ниже приведена структура массива конфигурации базы данных Codeigniter по умолчанию:
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'mydefaultdatabase';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['autoinit'] = FALSE;
$db['default']['stricton'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
Итак, для создания другого соединения с базой данных Вы должны создать другой массив конфигурации. Этот массив должен следовать той же структуре. Вот пример массива:
$db['anotherdb']['hostname'] = 'XXX.XXX.X.XXX';
$db['anotherdb']['username'] = 'another_user';
$db['anotherdb']['password'] = '';
$db['anotherdb']['database'] = 'anotherdatabase';
$db['anotherdb']['dbdriver'] = 'mysql';
$db['anotherdb']['dbprefix'] = '';
$db['anotherdb']['pconnect'] = TRUE;
$db['anotherdb']['db_debug'] = FALSE;
$db['anotherdb']['cache_on'] = FALSE;
$db['anotherdb']['cachedir'] = '';
$db['anotherdb']['char_set'] = 'utf8';
$db['anotherdb']['dbcollat'] = 'utf8_general_ci';
$db['anotherdb']['swap_pre'] = '';
$db['anotherdb']['autoinit'] = FALSE;
$db['anotherdb']['stricton'] = FALSE;
Подключение к нужной базе данных
На данный момент в вашем примере проекта есть две базы данных. Для подключения к указанной базе данных c необходимо указать имя базы данных. Вот правильный синтаксис:
this->load->database(anotherdb, TRUE)
После подключения к базе данных вы можете выполнять операции с базами данных, как показано ниже: загрузить 'anotherdatabase'
$this->legacy_db = $this->load->database(anotherdatabase, true);
Получить результат из 'mydefaultdatabase'
$this->legacy_db->select ('*');
$this->legacy_db->from ('mydefaultdatabase');
$query = $this->legacy_db->get();
$result = $query->result ();
Теперь, если вам нужно работать со второй базой данных, вы должны отправить соединение в переменную, которая может использоваться в вашей модели функция:
function db_calling_model_method()
{
$otherdb = $this->load->database('anotherdb', TRUE); // the TRUE paramater tells CI that you'd like to return the database object.
$query = $otherdb->select('column_one, column_two')->get('table');
var_dump($query);
}
Закрыть соединения
CodeIgniter закрывает соединения с базой данных после того, как определит, что код больше не нуждается в соединении. Однако, как хорошая практика, разработчики должны закрывать соединения явно. Вот как позаботиться о проблеме:
$this->db->close(); // for default Connection
$this->legacy_db->close(); //