База данных Codeigniter - Автоматический выбор - PullRequest
2 голосов
/ 25 октября 2011

У меня есть мультитенантное приложение, которое я разрабатываю, и я почти готов.

В настоящее время я использую одну базу данных для каждого клиента - каждый раз копирую ее и называю в зависимости от $ _SERVER ['http_host'] ...

Многие таблицы в каждой базе данных никогда не изменяются и содержат одну и ту же информацию.

Я хотел бы иметь основную базу данных приложения, которая содержит эту информацию, включая списокклиентов и какая там база данных называется.Затем эта база данных будет использоваться для выбора правильной базы данных клиентов ...

Возможно ли это, и кто-нибудь может указать мне в направлении подходящего учебника?

Спасибо

1 Ответ

1 голос
/ 25 октября 2011

ОК, поэтому вам потребуются различные конфигурации базы данных для вашей «административной» базы данных и для ваших «клиентских» баз данных.

Используйте примеры с этой страницы для генерации этих отдельных конфигов:

http://ellislab.com/codeigniter/user_guide/database/configuration.html

Затем, в вашем главном контроллере (скажите, пожалуйста, что вы расширяете MY_Controller.php , а не просто используете CI_Controller.php), вы захотите прочитать вашу базу данных 'admin' и получить всю информацию о клиенте , Затем вы захотите сгенерировать массив $config для этой клиентской базы данных и перезагрузить базу данных с новым массивом $config:

// in MY_Controller constructor

// do your thing here to connect to the admin database and get client details
// ...
//

$config['hostname'] = "localhost";
$config['username'] = $client_db_username; // you got this from the 'admin' database
$config['password'] = $client_db_password; // you got this from the 'admin' database
$config['database'] = $client_db_name; // you got this from the 'admin' database
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";

$this->load->database($config);

После этого у вас будет соединение с клиентской базой данных.

Примечание Если вам необходимо подключиться к обеим базам данных, то вы можете подключиться к нескольким базам данных, как описано на этой странице: http://ellislab.com/codeigniter/user_guide/database/connecting.html

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