gpt4 book ai didi

php - Cakephp 3 即时更改数据库连接?有效率吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:39:35 25 4
gpt4 key购买 nike

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

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

最佳答案

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

我想给出 2 个问题的答案。第一个将是对“我如何动态更改数据库?”这个问题(有点)的实际回答,我不明白为什么它会比替代方案效率低。

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

对于这两个选项,您需要在 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';
}
}

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

关于php - Cakephp 3 即时更改数据库连接?有效率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com