Cakephp 3动态更改数据库连接?效率高吗?

Cakephp 3动态更改数据库连接?效率高吗?,php,mysql,database,cakephp,Php,Mysql,Database,Cakephp,有没有一种方法可以动态更改数据库连接?效率高吗? 我们有多个数据库的客户端。它们都包含相同的结构,但我们将它们分开,以便在应用程序和安全性中使用相同的类。有没有比切换数据库连接更好的方法?也许将它们都放在一个数据库中,并为每个表使用前缀。我可以随时更改数据库前缀吗 编辑: 提供更多关于我的情况的信息。我们的客户需要在一个应用程序中连接多个存储。目前,我们正在不同的应用程序中显示每个商店。因为当时他只有一个,现在他有三个。每个商店都有自己的数据库。这有用吗 我也有这个问题,我正在这里记录我的解决方

有没有一种方法可以动态更改数据库连接?效率高吗? 我们有多个数据库的客户端。它们都包含相同的结构,但我们将它们分开,以便在应用程序和安全性中使用相同的类。有没有比切换数据库连接更好的方法?也许将它们都放在一个数据库中,并为每个表使用前缀。我可以随时更改数据库前缀吗

编辑:
提供更多关于我的情况的信息。我们的客户需要在一个应用程序中连接多个存储。目前,我们正在不同的应用程序中显示每个商店。因为当时他只有一个,现在他有三个。每个商店都有自己的数据库。这有用吗

我也有这个问题,我正在这里记录我的解决方案

我想对这个问题给出两个答案。第一个问题是对“如何动态更改数据库?”这一问题的实际回答,我不明白为什么它的效率会比其他方法低

第二个选项是处理多个连接的更灵活的方法,并且(在我看来)允许您更好地定义数据类型

对于这两个选项,您需要在config/app.php中定义所有数据源

您可以将连接选项传递给TableRegistry::get

// controller code - you would need to implement Stores::getConnectionName
$storeConnection = $this->Stores->getConnectionName($data);
$stores = TableRegistry::get('Stores', ['connection' => $storeConnection]);
这还要求所有数据库中的表名都相同

您可以创建一个包含所有逻辑的父表类来处理存储数据,并为每个存储扩展它。

// App\Model\Table\BaseStoreTable
use Cake\ORM\Table;
class BaseStoreTable extends Table {

}

// App\Model\Table\StoreOneTable
use App\Model\Table\BaseStoreTable;
class StoreOneTable extends BaseStoreTable {
    public static function defaultConnectionName() {
        return 'store_one';
    }
}

// App\Model\Table\StoreTwoTable
use App\Model\Table\BaseStoreTable;
class StoreTwoTable extends BaseStoreTable {
    public static function defaultConnectionName() {
        return 'store_two';
    }
}

您仍然需要实现一种确定使用哪个类的方法,并且有多种处理方法。如果数据源中存在其他差异,这将为您提供更大的灵活性。

您需要提供更多信息。例如,如果您必须在同一会话中从一个客户端跳到另一个客户端(例如,管理员检查内容),那么这可能不是有效的,但却是唯一的选择。但是,如果客户机一直登录到一个只访问自己数据库的数据库中,那么您并不是在动态地更改数据库,是吗?你想做什么和问题都很清楚,背景信息可以更清楚一些,以提供更好的答案。添加更多信息!谢谢