有没有办法动态更改数据库连接?有效率吗? 我们的客户拥有多个数据库。它们各自包含相同的结构,但我们将它们分开,以便在我们的应用程序和安全目的中使用相同的类。有没有比切换数据库连接更好的方法?也许将它们全部放在一个数据库中,并为每个表使用前缀。我可以即时更改数据库前缀吗?
编辑: 提供有关我的情况的更多信息。我们的客户有多个商店,他需要在一个应用程序中连接这些商店。目前,我们正在不同的应用程序中显示每个商店。因为当时他只有一个,现在他有三个了。每个商店都有自己的数据库。这有帮助吗?
最佳答案
我也有这个问题,我在这里记录我的解决方案。
我想对这个问题给出两个答案。第一个将是对“如何动态更改数据库?”这个问题(有点)的实际答案,我不明白为什么它会比替代方案效率低。
第二个选项是处理多个连接的更灵活的方式,并且(在我看来)允许您更好地定义数据类型。
对于这两个选项,您需要在 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/