【问题标题】:CakePHP using multiple databases for modelsCakePHP 为模型使用多个数据库
【发布时间】:2009-11-24 05:49:03
【问题描述】:

是否有可能某些模型在一个数据库中而其他模型在另一个数据库中(使用相同的连接)?

我有许多只读表,希望在我的系统的多个安装之间共享。其他表需要按安装进行。例如,假设users 是共享表,posts 是每次安装。

在一个模式(我们称之为“共享”)中,我们有 users 表,而在另一个模式(“mycake”)中是posts。

我已经能够通过创建一个指向共享数据库的新数据库连接来从另一个数据库读取用户模型(尽管两个数据库位于同一主机上并且都可以使用相同的登录详细信息进行访问) .

class User extends AppModel {
    var $useDBConfig = 'sharedConnection';
}

问题在于何时加入posts 表。它不会将架构名称添加到表名称之前,因此无法找到 posts。

// what it does
SELECT * FROM users User INNER JOIN posts Post ...

// what I'd like it to do:
SELECT * FROM shared.users User INNER JOIN mycake.posts Post ...

所以基本上,有没有办法为模型分配一个完全限定的表名并强制它在所有查询中使用它?设置var $useTable = 'shared.users'; 没有帮助...

【问题讨论】:

  • 这是个好问题。在选择框架时(在 PHP 中),我总是检查框架是否允许这样做。

标签: php mysql cakephp cakephp-model


【解决方案1】:

This site 有办法做到这一点,但它有点 hacky。

【讨论】:

【解决方案2】:

我已经在 CakePHP 中建立了一个站点,该站点具有使用不同数据库的模型,而且我从来没有遇到过不同数据库之间的连接问题 - 框架似乎为我处理了所有这些问题。尽管您可能需要明确说明模型中使用的数据库表才能使其正常工作。

【讨论】:

  • 我只是为每个数据库使用了不同的登录详细信息。从他们共享登录信息时的记忆来看,存在问题。
【解决方案3】:

为模型切换数据库,

使用控制器/模型中的命名空间

use Cake\Datasource\ConnectionManager;

在控制器中;-

$conn = ConnectionManager::get('remote_db_1');
$this->ModelName->connection($conn);

在模型中:-

$conn = ConnectionManager::get('remote_db_1');
$this->connection($conn);

注意:- 如果您也为关联表保存数据,请保留 记住要更改关联数据的数据库,否则要更改数据 关联的表将被插入到默认连接/数据库中。

这是 CakePHP 3 的答案。*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多