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

时间:2013-02-27 14:42:29

标签: php database codeigniter cakephp-2.0

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

我已经开始使用CakePHP网站上的基本教程来创建一个小型博客应用程序。这很好。我还将其与Twitter Bootstrap相结合。 现在我正在重建我的申请。

首先,我解释一下我的应用程序的作用。 它显示数据库中数据的列表(概述)。 此数据库位于localhost(MySQL)上,称为“localdb1”(对于此示例)。 表格被称为“表格”。 此表包含我可以直接使用的数据,但包含引用其他数据库的ID

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

现在2天了,我在使用CakePHP中的数据库系统。由于系统使用名称约定,对我来说并不清楚。

我做了什么:

  • 我在网站上阅读并搜索了CakePHP文档,我认为这非常有用,但我找不到答案。
  • 我已经将互联网(通过Google offcourse)解决了问题。我找到了许多不同的可能解决方案,但非适用或在数据库连接中给出了几个错误。
  • 我在Stackoverflow的QA中搜索。与上述相同。 :(

结果如何:

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

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

1 个答案:

答案 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"]);
    }