对于我的工作,我用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"]);
}