Dolly
Dolly

Reputation: 1052

How can I connect to second database with my cakephp application

my application's requirement is that to display data of magento database table forexample admin_user that is reside at locally connected pc. so I need to keep as it is my cakephp database values in displaying-modifying-etc, and in only one page magento's database value needs to be printed and updated.

I have kept 2 variables in databse.php

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'root',
    'password' => '',
    'database' => 'myappdatabase',
    'prefix' => '',
    //'encoding' => 'utf8',
);
    var $vsdatabase = array(    
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => '192.168.1.36',   
    'login' => 'root',          
    'password' => '',           
    'database' => 'magento',    
    'prefix' => '',
    );

and in controller,

     App::import('Model','ConnectionManager');
$db = ConnectionManager::getDataSource('vsdatabase');
$database = $db->config['database'];
$data = $this->User->query("select * from $database.admin_user as t1");

the host I like to keep as written above means default is from my local database and other is remote PC's magento database If I both host keep same then its working but if write different then It's not working

So I solve this problem? Plz help me in finding out solution

Upvotes: 0

Views: 2578

Answers (1)

floriank
floriank

Reputation: 25698

What you do is plain wrong and even if you would use that code it should belong into a model not a controller.

Simply create a new model named after the magento table, but I would prefix it with magento or something. The model has to be configured to use this db connection.

class MagentoUser extends AppModel {
    public $useDbConfig = 'vsdatabase';
}

You can also init models with other aliases and data sources on the fly using ClassRegistry. See http://api20.cakephp.org/class/class-registry#method-ClassRegistryinit

And stay away from using plain SQL queries, you will very likely ending up writing insecure queries and lose other features of the CakePHP ORM.

Upvotes: 3

Related Questions