CakePHP使用多个数据库进行模型

时间:2009-11-24 05:49:03

标签: php mysql cakephp cakephp-appmodel

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我在CakePHP中构建了一个网站,其中包含使用不同数据库的模型,我从来没有遇到过跨不同数据库的连接问题 - 框架似乎为我提供了所有这些。虽然您可能需要明确说明模型中使用的数据库表,以使其工作。

答案 2 :(得分:0)

要切换模型的数据库,

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

use Cake\Datasource\ConnectionManager;

在控制器中; -

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

在模特中: -

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

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

这是CakePHP 3的答案。*