在CakePHP中跨应用程序使用多个数据库和表


Use multiple databases and tables across an application in CakePHP

对于我的工作,我用CodeIgniter构建了一个基于web的应用程序。现在我想在CakePHP中重建这个应用程序,因为我认为它是一个更好的框架,可以做更多的事情,比我现在的框架有更多的结构。

我从CakePHP网站上的基础教程开始创建一个小型博客应用程序。这很好。我还结合了Twitter Bootstrap。现在我正在重新构建我的应用程序。

首先说明我的应用程序是做什么的。它显示来自数据库的数据列表(概览)。该数据库位于本地主机(MySQL)上,名为"localdb1"(在本例中)。这个标签被称为"页"。这个表包含我可以直接使用的数据,但它也包含引用其他数据库的id

例如一个名为customer的字段,其中包含客户的号码。客户的姓名存储在位于另一台主机("remotehost2")上的另一个数据库(ODBC)中。在本例中,数据库名为"remotedb2",客户名存储在"customers"表的"customername"字段中。

2天了,我在CakePHP的数据库系统中挣扎。由于系统使用名称约定,我不太清楚。

我做了什么:

  • 我已经在那里的网站上阅读和搜索CakePHP文档,我认为这是非常有用的,但我找不到答案。
  • 我在互联网上(当然是通过谷歌)寻找答案。我发现了许多不同的可能的解决方案,但不适合或给出几个错误与数据库连接。
  • 我在Stackoverflow的QA中搜索过。同上。(

结果应该是什么样子:

我想要localdb1的记录列表。但是我不想显示客户的号码,而是要显示客户的姓名,这是我在远程数据库remotedb2中找到的。并可按客户号码查找

谁能告诉我应该怎么做?困难在于,我不仅想要这样,而且还将合并位于这两台主机上的更多数据库和表。所以我需要一个解决方案,像一个插件(或者如果它是一个更好的模型),能够从远程主机,或本地主机从其他表获取内容。

我不知道它是否对你有用,但我正在使用下面的模式维护我的多个云数据库。我希望它对你也有用。

在database.php中为第二个数据库新建一个连接对象

public $user = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'remotehost2',
    'login' => 'login_id',
    'password' => 'password',
    'database' => 'remotedb2',
    'prefix' => '',
    'encoding' => 'utf8',
);

之后,您可以在模型中使用下面的语法使用该连接对象

enter var $useDbConfig = 'table_name';

你也可以使用下面的语法来维护连接

 $options = array();
    $db = ConnectionManager::getDataSource('table_name');
    $list = $db->rawQuery('select id, name from table_name;');
    while ($row = $db->fetchRow()) { 
        $options = Set::insert($options, $row["table_name"]["id"], $row["tablle_name"]["name"]);
    }