【发布时间】:2011-10-24 20:11:27
【问题描述】:
我正在开发一个多租户应用程序,并且快完成了。
目前我为每个客户使用一个数据库 - 每次复制它并根据 $_SERVER['http_host'] 命名...
每个数据库的很多表永远不会改变,并且包含相同的信息。
我想要一个包含此信息的主应用程序数据库,包括客户端列表和数据库的名称。然后该数据库将用于选择正确的客户数据库...
这可能吗?谁能指出合适教程的方向?
谢谢
【问题讨论】:
标签: codeigniter
我正在开发一个多租户应用程序,并且快完成了。
目前我为每个客户使用一个数据库 - 每次复制它并根据 $_SERVER['http_host'] 命名...
每个数据库的很多表永远不会改变,并且包含相同的信息。
我想要一个包含此信息的主应用程序数据库,包括客户端列表和数据库的名称。然后该数据库将用于选择正确的客户数据库...
这可能吗?谁能指出合适教程的方向?
谢谢
【问题讨论】:
标签: codeigniter
好的,因此您的“管理”数据库和“客户”数据库需要不同的数据库配置。
使用此页面中的示例生成这些单独的配置:
http://ellislab.com/codeigniter/user_guide/database/configuration.html
然后,在您的主控制器中(请告诉我您扩展了MY_Controller.php 而不仅仅是使用 CI_Controller.php),您将需要读取您的“管理员”数据库并获取所有客户端信息。然后,您需要为此客户端数据库生成一个$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
【讨论】: