0

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

我从 CakePHP 网站上的基本教程开始创建一个小型博客应用程序。这很好用。我还将它与 Twitter Bootstrap 结合起来。现在我正在重建我的应用程序。

首先我解释一下我的应用程序是做什么的。 它显示来自数据库的数据列表(概览)。该数据库位于 localhost (MySQL) 上,称为“localdb1”(对于本示例)。该表称为“表”。该表包含我可以直接使用的数据,但它也包含引用其他数据库的 id

例如一个名为 customer 的字段,其中包含客户的编号。客户的姓名存储在另一个数据库 (ODBC) 中,该数据库位于另一个主机 (“remotehost2”) 上。对于此示例,数据库称为“remotedb2”,客户名称存储在“客户名称”字段中的“客户”表中。

两天来,我一直在为 CakePHP 中的数据库系统苦苦挣扎。由于系统使用名称约定,我还不清楚。

我做了什么:

  • 我已经阅读并搜索了该网站上的 CakePHP 文档,我认为这非常有用,但我找不到答案。
  • 我已经搜索了互联网(通过谷歌课程)寻求答案。我发现了许多不同的可能解决方案,但不适合或在数据库连接时出现多个错误。
  • 我在 Stackoverflow 的 QA 中进行了搜索。和上面一样。:(

结果应如下所示:

我想要一个来自localdb1.sheets的记录列表,但我不想显示客户的号码,但我想要客户的姓名,我在远程数据库remotedb2.customers中找到并且可以通过客户的号码找到

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

4

1 回答 1

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';

或者

您也可以使用以下语法维护连接

 $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"]);
    } 
于 2013-03-02T05:38:08.877 回答