Dynamically change database connection in cakephp 3

后端 未结 3 1058
耶瑟儿~
耶瑟儿~ 2021-01-24 02:36

I\'m trying to change the database connection used in cakephp 3 on the fly. Every answer to this question that I found refers to cakephp 2 (The

相关标签:
3条回答
  • 2021-01-24 03:16

    Configuring table connections

     namespace App\Model\Table;
    
     use Cake\ORM\Table;
    
     class ArticlesTable extends Table
     {
         public static function defaultConnectionName() {
         return 'replica_db';
         }
     }
    
    0 讨论(0)
  • 2021-01-24 03:18

    Use the ConnectionManager::config() function to create connections on the fly and the ConnnectionManager::alias() method to make all your Table classes use it by default.

    There is a very good article describing the process here:

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

    The only difference is that you can create the connection config on the fly instead of declaring the shards manually as it was shown in that article.

    0 讨论(0)
  • 2021-01-24 03:32

    Change database connection for one model:

    In 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'],
            ]

    In Controller :

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

    0 讨论(0)
提交回复
热议问题