Кто-нибудь знает, как лучше использовать две разные базы данных в моем приложении?
Мне нужно хранить данные в обеих базах данных, которые по-разному расположены (хост, имя пользователя, пароль, все меняется).
Я планирую создавать модели, как обычно, и в конструкции устанавливают хост, имя, пропуск и т. Д.
Я не уверен, что вы называете этот «лучший» способ, но способ, как описано в учебнике, заключается в том,
в файле базы данных вы имеете конфигурацию по умолчанию, часть которой:
$db['default']['hostname'] = "localhost"; $db['default']['username'] = "user"; $db['default']['password'] = "database"; $db['default']['database'] = "db1";
теперь вы можете создать другую группу, скажем, мы называем ее group1, и мы хотим, чтобы она имела все то же самое, что и настройки базы данных по умолчанию, кроме имени, поэтому вы можете сделать
$db['group1']=$db['default']; $db['group1']['database']="db2";
по$db['group1']=$db['default']; $db['group1']['database']="db2";
то, когда вы хотите использовать вторую базу данных, просто
$DB2 = $this->load->database('group1', TRUE);
а затем вместо $this->db->foo()
вы будете делать $DB2->foo()
альтернативно (как предложено в комментариях sbaaaang), вы можете сделать $this->db=$DB2;
держать все одинаково
и вы можете распространить это на несколько групп, подобных этому
$DB1 = $this->load->database('group1', TRUE); $DB2 = $this->load->database('group2', TRUE); ... $DBn = $this->load->database('groupn', TRUE);
Ну, я бы хотел просто написать здесь мое решение, потому что я использовал меньше кода, я думаю:
в database.php я устанавливаю группы базы данных так для ex:
$database['default']['dbname'] = 'db1'; $database['second_db']['dbname'] = 'db2';
то в моделях я использовал конструктор для переключения в базу данных, которую хочу использовать следующим образом:
//use db1 function __construct() { // Call the Model constructor parent::__construct(); $this->load->database('default',true); } //use db2 function __construct() { // Call the Model constructor parent::__construct(); $this->load->database('second_db',true); }
по//use db1 function __construct() { // Call the Model constructor parent::__construct(); $this->load->database('default',true); } //use db2 function __construct() { // Call the Model constructor parent::__construct(); $this->load->database('second_db',true); }
если кто-то хотел бы показать больше решений, сделайте это, пожалуйста! Это всего лишь мои два цента.
Я читал, что
$db['default']['pconnect'] = FALSE;
должно быть ложным, чтобы эти вещи работали. Пожалуйста, поправьте меня, если я ошибаюсь. Для ВСЕХ нескольких баз данных, которые вы используете, он должен быть выключен. Я не знаю, является ли это хорошим решением.
Пробовал это, и он работает:
$db['otherdb'] = array_merge($db['primarydb'], array( 'database' => 'otherdbname' ));