2016-07-11 65 views
0

我需要在cakephp 3中執行dunamic連接。我想改變數據庫連接,因爲我在configManager :: config中傳遞數據庫名稱。 並且我想在連接改變後在所有控制器中改變連接。在cakephp 3中的動態連接

AppBehavior的代碼如下,

的ConnectionManager ::降( 'myconn1');

$配置= ::的ConnectionManager配置( 'myconn1',[

'className' => 'Cake\Database\Connection', 

'driver' => 'Cake\Database\Driver\Mysql', 

'persistent' => false, 

'host' => $databaseDetails['res_host'], 

'username' => $databaseDetails['res_login'], 

'password' => $databaseDetails['res_password'], 

'database' => $databaseDetails['res_database'], 

'encoding' => 'utf8', 
'timezone' => 'UTC', 
'cacheMetadata' => true, 

]); ConnectionManager :: get('myconn1');

在AppBehavior中的上述代碼之後,我必須在所有控制器中使用新的連接。

回答

0
public function ChangeClientConnection($databaseDetails) 
{ 
    if(isset($databaseDetails) && !empty($databaseDetails)) 
    { 
     ConnectionManager::drop('conn1');    

     $config = ConnectionManager::config('conn1', [ 
      'className' => 'Cake\Database\Connection', 
      'driver' => 'Cake\Database\Driver\Mysql', 
      'persistent' => true, 
      'host' => $databaseDetails['res_host'], 
      'username' => $databaseDetails['res_login'], 
      'password' => $databaseDetails['res_password'], 
      'database' => $databaseDetails['res_database'], 
      'encoding' => 'utf8', 
      'timezone' => 'UTC', 
      'cacheMetadata' => false, 

     ]);    
     $conn = ConnectionManager::get('conn1'); 
     ConnectionManager::alias('conn1', 'default'); 
    } 
    else 
    { 
     $conn = ConnectionManager::get('default'); 

    } 

    return $conn; 
}