Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP为模型使用多个数据库_Php_Mysql_Cakephp_Cakephp Model - Fatal编程技术网

CakePHP为模型使用多个数据库

CakePHP为模型使用多个数据库,php,mysql,cakephp,cakephp-model,Php,Mysql,Cakephp,Cakephp Model,某些模型可能在一个数据库中,而其他模型在另一个数据库中(使用相同的连接)吗 我有许多只读表,希望在系统的多个安装之间共享。其他表格需要根据安装情况进行调整。例如,假设users是共享表,posts是每个安装 在一个模式中(我们称之为“共享”),我们有users表,在另一个模式中(“mycake”)是posts // what it does SELECT * FROM users User INNER JOIN posts Post ... // what I'd like it to do:

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

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

在一个模式中(我们称之为“共享”),我们有
users
表,在另一个模式中(“mycake”)是
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 ...
通过创建一个指向共享数据库的新数据库连接,我已经能够从另一个数据库读取用户模型(尽管这两个数据库位于同一主机上,并且都可以使用相同的登录详细信息进行访问)

问题在于何时加入
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'没有帮助

有一种方法可以做到这一点,但它有点粗糙。

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

要切换模型的数据库

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

use Cake\Datasource\ConnectionManager;
在控制器中-

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

$conn = ConnectionManager::get('remote_db_1');
$this->connection($conn);
注意:-如果您也要保存关联表的数据,请保留 请记住,更改关联数据的DB,否则将更改数据的DB 关联表将插入默认连接/DB


这是CakePHP 3的答案。*

这是一个好问题。当选择一个框架(在PHP中)时,我总是检查框架是否允许这样做。不管怎样,我还是要试一试。它有点过时了,但我能够把它整合起来让它工作。文章现在在:我只是对每个数据库使用了不同的登录详细信息。从内存中可以看出,当他们共享登录时出现了问题。