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

标签 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';
    }
}

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

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

相关文章:

PHP For 循环不启动

java - 如何从互联网上的某些资源中读取信息并将其保存在数据库中

sql - 不明确的外连接?

php - $wpdb 不适用于自定义(woocommerce)表

javascript - 如何将 json 数据添加到由 long 和 lat 组成的数组中?

php - 如何获取特定用户的数据,但来自不同的表

php - Laravel 4.1 查询 hasMany 关系?

c - 实现高性能分布式文件系统/数据库

php - 按下后退按钮时 JavaScript 文件被缓存

php - 如何从提交按钮调用 php 函数?