如何使用我的cakephp应用程序连接到第二个数据库

时间:2012-03-14 05:03:59

标签: cakephp

我的应用程序的要求是显示magento数据库表的数据,例如驻留在本地连接的pc上的admin_user。 所以我需要保留,因为它是我在显示修改等中的cakephp数据库值,并且只需要打印和更新magento的数据库值。

我在databse.php中保留了2个变量

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' => '',
    );

并在控制器中,

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

我喜欢保留的主机如上所述意味着默认来自我的本地数据库而其他是远程PC的magento数据库 如果我两个主机保持相同然后它的工作,但如果写不同然后它不工作

所以我解决了这个问题?  Plz帮助我找到解决方案

1 个答案:

答案 0 :(得分:3)

你所做的是完全错误的,即使你使用该代码,它也应该属于模型而不是控制器。

只需创建一个以magento表命名的新模型,但我会在其前面加上magento或其他东西。必须将模型配置为使用此数据库连接。

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

您还可以使用ClassRegistry动态地使用其他别名和数据源初始化模型。见http://api20.cakephp.org/class/class-registry#method-ClassRegistryinit

远离使用纯SQL查询,您很可能最终编写不安全的查询并丢失CakePHP ORM的其他功能。