Dave Lough
Dave Lough

Reputation: 85

Codeigniter Database - Automatic Selection

I have a multi-tenancy application that I am developing and I'm nearly there.

Currently I am using one database per customer - copying it each time and naming depending based on $_SERVER['http_host']...

A lot of the tables each database never change, and contain the same information.

I would like to have a main application database that contains this information, including a list of clients and what there database is called. This database would then be used to select the correct customers database...

Is this possible and can anyone point me in the direction of a suitable tutorial?

Thanks

Upvotes: 2

Views: 479

Answers (1)

swatkins
swatkins

Reputation: 13630

OK, so you'll need different database configs for your "administrative" database and your "customer" databases.

Use the examples from this page to generate those separate configs:

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

Then, in your main controller (please tell me your extending a MY_Controller.php and not just using CI_Controller.php), you'll want to read your 'admin' database and get all client information. You'll then want to generate a $config array for this client database and reload the database with the new $config array:

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

You'll then have a connection to the client database.

Note If you'll need to connect to both databases back and forth, then you can connect to multiple databases as explained on this page: http://ellislab.com/codeigniter/user_guide/database/connecting.html

Upvotes: 1

Related Questions