2016-07-22 29 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が自動的に作成されるためである。スクリプトは、その名前の新しいデータベースを作成し、ユーザーのアプリケーションdbの空のコピーを作成します。

今のところ、これをハードコーディングしているので、完全に動作していると見なすことができます。

$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 
); 

うまくいけばなり:

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

の代わりにこのファイルをハードコーディング、私はこのような何かを行うことができるようにしたい:

は、私が欲しいのはCodeIgniterのdatabase.phpでファイル内にありますsense - ログインしたユーザーに基づいてdb名を取得する必要があります。明らかに、私はそれをつかむためにモデルか単なる関数を構築する必要がありますが、問題はどこにありますか?モデルを追加してグローバルDBに接続し、モデルをデータベースコンフィグレーションにロードしますか?これを行うための他の、より簡単で、より生産的な方法がありますか? codeigniterのコアファイルは、codeigniterの設定ファイルの中から呼び出すことができますか?

答えて

0

2つのデータベース接続を使用します。グローバルユーザーアカウントでは1、実際のユーザーデータベースでは1です。次に、ユーザーデータベースを取得するヘルパー関数を作成します。ちょうどアイデア。

+0

これは私がやっていることですが、問題は、ユーザー/ URLに応じて自動的に正しいユーザーデータベースをロードすることです。 (get_instance()を使用して)database.phpにヘルパーを追加すると、無限再帰が発生します。 –

+0

変更 '$ db [' default '] [' autoinit '] = TRUE;'偽に – reignsly

関連する問題