我的产品有50个客户。每个客户都有一个MYSQL数据库,我正在使用Codeigniter。
我有50个子文件夹,例如domain.com/client1 domain.com/client2,依此类推 我想只为我的所有客户和不同的数据库和子域安装一个 我不想为每个新客户端安装多个副本
理想情况下是domain.com/app /
实现这一目标的最佳方法是什么? 我尝试为每个客户动态创建文件夹,并在客户注册时编写diff配置文件。 我想我在这里做错了。
答案 0 :(得分:2)
您想要的是多租户架构,即所有客户的相同代码,但每个客户都有专用数据库。
1)您可以创建一个主数据库来记录用户及其关联的数据库。一旦用户注册,就为它们创建一个新数据库并更新主表,记录与该用户关联的数据库名称。
2)当用户登录时,您需要使用主表数据进行身份验证,一旦通过身份验证,您就拥有与用户关联的数据库名称。
获得数据库名称后,需要将数据库切换到用户的数据库。
CodeIgniter中有可用的功能,您可以在其中更新$db
变量:
$this->db = $this->load->database();
一旦完成,所有操作将仅对相关用户的数据库执行。
注意:您需要在所有必需文件中更改$db
变量,或者您可以全局更改。
希望这有帮助。
修改强>
要全局加载数据库,您可以将数据库保存在会话中,并在帮助文件中创建一个函数(使用会话中的数据库名称),该函数将切换数据库。您只需要在主控制器中加载帮助器,这将全局切换$db
。