4

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

我有许多我想在我的系统的多个安装之间共享的只读表。其他表需要按安装进行。例如,假设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';没用...

4

3 回答 3

1

这个网站有办法做到这一点,但它有点hacky。

于 2009-11-24T06:05:35.350 回答
1

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

于 2009-11-24T14:32:04.503 回答
0

要切换模型的数据库,

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

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 的答案。*

于 2018-01-30T14:54:27.513 回答