对于我的工作,我使用 CodeIgniter 构建了一个基于Web的应用程序。现在我想在 CakePHP 中重建这个应用程序,因为我认为它是一个更好的框架,可以做更多,结构比我当前的框架更多。
我已经开始使用CakePHP网站上的基本教程来创建一个小型博客应用程序。这很好。我还将其与Twitter Bootstrap相结合。 现在我正在重建我的申请。
首先,我解释一下我的应用程序的作用。 它显示数据库中数据的列表(概述)。 此数据库位于localhost(MySQL)上,称为“localdb1”(对于此示例)。 表格被称为“表格”。 此表包含我可以直接使用的数据,但包含引用其他数据库的ID 。
例如,一个名为customer的字段,其中包含客户的编号。客户的名称存储在另一个主机(“remotehost2”)上的另一个数据库(ODBC)中。对于此示例,数据库名为“remotedb2”,客户名称存储在“customername”字段中的“customers”表中。
现在2天了,我在使用CakePHP中的数据库系统。由于系统使用名称约定,对我来说并不清楚。
我做了什么:
结果如何:
我想要一份来自localdb1.sheets的记录列表,但我不想显示客户的号码,但我想要客户的名字,我在远程数据库中找到了remotedb2.customers,可以通过客户找到编号
有人可以告诉我应该怎么做吗? 困难在于,我不仅想要这个,而且我将在这两个主机上组合更多的数据库和表。所以我需要一个像插件(或者如果它更好的模型)的解决方案,它能够从远程主机获取内容,或者从其他表中获取本地主机。
答案 0 :(得分:2)
我不知道它对您有用,但我使用以下模式维护我的多个云数据库。我希望它也适合您...
在您的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';
OR
您可以使用以下语法维护连接
$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"]);
}