2016-07-22 69 views
0

使用Codeigniter 3.0.6Codeigniter:使用数据库存储多个用户的数据库名

直到现在我一直在使用Codeigniter的标准设置。我有一个数据库,所有连接都很好。我遇到的问题是我想添加一个'global_accounts'数据库,根据当前登录的用户将从中选择要加载的数据库。

Global_Accounts 
-------------------------------------------------------- 
user    | coolUser     | user2 
pass    | coolPassword    | passy 
url    | coolestsite.mysite.com  | u2.mysite.com 
database_name | coolestsite_application_db | u2_application_db 

就我而言,应用程序数据/模式并不重要。我想要的(并且将要建立的,但是在这个问题的范围之外)是当用户注册时,他们将填写用户,传递和url,并且db_name将被自动创建。然后该脚本将创建一个具有该名称的新数据库,为用户创建应用程序数据库的空白副本。

所以现在,我们正在编码这个硬编码,所以我们可以假设它的工作完美。

我要的是里面笨的database.php中的文件:

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => 'coolsite_application_db' 
    ...etc 
); 

而不是硬编码这个文件,我希望能够做这样的事情:

$db['global'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => 'global_accounts' 
    ... 
); 

$db['default'] = array(
    'dsn' => '', 
    'hostname' => 'mysite.com', 
    'username' => 'root', 
    'password' => 'pass', 
    'database' => $this->db['global']->get_db_name($loggedInUserId); 
    ...etc 
); 

希望这使得意义 - 我需要根据登录的用户获取数据库名称。显然,我需要建立一个模型或只是一个函数来抓住它,但问题是在哪里?我是否添加模型,连接到全局数据库,然后在数据库配置中加载模型?还有其他更简单更高效的方式来做到这一点吗? Codeigniter核心文件能够从codeigniter配置文件中调用吗?

回答

0

使用2个数据库连接。 1为全球用户帐户,1为实际用户数据库。然后创建一个帮助函数来抓取用户数据库。只是一个想法。

+0

这就是我正在做的,但问题是,我想它会自动加载正确的用户数据库,具体取决于用户/网址。将一个助手添加到database.php(使用get_instance())会导致无限递归。 –

+0

更改'$ db ['default'] ['autoinit'] = TRUE;'进入FALSE – reignsly

相关问题