Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Codeigniter - best way to use two different database

Does someone knows the best practice for using 2 different database in my application?

I need to store data in both databases which are differently located (host,username,password , all does change).

I'm planning to create models as usual, and in construct set the db host,name,pass etc.

like image 947
itsme Avatar asked Oct 07 '12 09:10

itsme


People also ask

Can we use multiple database in CodeIgniter?

If your application is built with the CodeIgniter framework, it's exceptionally simple to use multiple databases. CodeIgniter provides an easy way to put through and utilize numerous databases on the same or distinct server.

Can we use two databases in single project?

Multiple database technologies can be used with monolithic applications, and can even seem more natural in a microservices environment, where each service would have its own database.

How do you connect multiple databases?

There are two methods to connect multiple MySQL databases into a single webpage which are: Using MySQLi (Improved version of MySQL) Using PDO (PHP Data Objects)

How can I change database in CodeIgniter?

You can create session variable to indicate the current database, and in your controller's constructor, get the variable and load the database.


2 Answers

I'm not sure if you call this "best" way, but a way, as described in the tutorial, is this,

in the database file, you have the default configuration, a part of which is:

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "user";
$db['default']['password'] = "database";
$db['default']['database'] = "db1";

now you can create another group, say we call it group1 and we want it to have everything the same as the default database settings except for the name, so you can do

$db['group1']=$db['default'];
$db['group1']['database']="db2";

then, when you want to use the second database, just go

$DB2 = $this->load->database('group1', TRUE); 

and then, instead of $this->db->foo() , you will do $DB2->foo()

alternatively (as suggested in comments by sbaaaang), you can do $this->db=$DB2; to keep everything the same

and you can extend this to multiple groups like this

 $DB1 = $this->load->database('group1', TRUE); 
 $DB2 = $this->load->database('group2', TRUE); 
 ...
 $DBn = $this->load->database('groupn', TRUE); 
like image 108
Ahmed-Anas Avatar answered Sep 24 '22 21:09

Ahmed-Anas


Well i would like just to write here my solution cause i've used less code i think:

in database.php i set the database groups so for ex:

$database['default']['dbname'] = 'db1';
$database['second_db']['dbname'] = 'db2';

then in models i used the constructor to switch to database i want to use like this:

//use db1
function __construct()
    {
        // Call the Model constructor
        parent::__construct();
         $this->load->database('default',true);
    }
//use db2
function __construct()
    {
        // Call the Model constructor
        parent::__construct();
         $this->load->database('second_db',true);
    }

if anyone would like to show more solutions do that please! These are just my two cents.

like image 39
itsme Avatar answered Sep 26 '22 21:09

itsme