在cakephp 3中动态更改数据库连接

问题描述 投票:1回答:3

我正在尝试动态更改cakephp 3中使用的数据库连接。我找到的这个问题的每个答案都指的是cakephp 2(These three for实例)。

This guy找到了cakephp 3的解决方案,该解决方案具有有限数量的数据库,并且具体定义哪个数据库将由哪个表文件使用。

问题是我想为每个新用户创建一个新数据库,并在他登录时更改为他的数据库。我事先无法知道将存在的所有数据库,将其写入config/app.php文件。

我无法在每个/ src / Model / Table文件中设置默认数据库,因为每个数据库中的表都相同。

php mysql database cakephp cakephp-3.0
3个回答
5
投票

使用ConnectionManager::config()函数动态创建连接和ConnnectionManager::alias()方法,以使所有Table类默认使用它。

这里有一篇非常好的文章描述了这个过程:

http://mark-story.com/posts/view/using-cakephp-and-a-horizontally-sharded-database

唯一的区别是您可以动态创建连接配置,而不是手动声明分片,如该文章中所示。


0
投票

更改一个模型的数据库连接:

在app.php中:

'test' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => MySQL_HOST,
            //'port' => 'nonstandard_port_number',
            'port' => MySQL_PORT,
            'username' => MySQL_USER,
            'password' => MySQL_PASS,
            'database' => 'test',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
            'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        ]

在控制器中:

$conn = ConnectionManager::get('test');
 $_model = TableRegistry::get('your_alias', ['table' => 'your_table', 'connection' => $conn]);
 
         

0
投票

Configuring table connections

 namespace App\Model\Table;

 use Cake\ORM\Table;

 class ArticlesTable extends Table
 {
     public static function defaultConnectionName() {
     return 'replica_db';
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.