2017-07-20 58 views
0

我有一個CakePHP 3.4.6 Web應用程序。由於它使用遺留(不是在Cake的約定中編寫的)數據庫表,我們選擇手動編寫所有SQL查詢,而不是嘗試設置TableEntity類。我意識到有些人會不同意這一點,但那不是問題的關鍵。CakePHP 3 - 使用多個數據庫連接*無ORM *

我有3個數據庫:app_dbusers_db,extra_db

我在配置每一個連接config/app.php使得:

'Datasources' => [ 
    'default' => [], // 'app_db' credentials 
    'users_db' => [], // 'users_db' credentials 
    'extra_db' => [], // 'extra_db' credentials 
]; 

我有位於src/Model/MyModel.php一個自定義的模型文件。它的一個例子被用來做(app_db)工作原理是這樣的數據庫一個查詢:

namespace App\Model; 

use Cake\Datasource\ConnectionManager; 

class MyModel 
{ 
    protected $connection; 

    public function __construct() 
    { 
     $this->connection = ConnectionManager::get('default'); 
    } 

    public function getData() 
    { 
     $sql = ''; // some SQL query 
     $stmt = $this->connection->prepare($sql); 
     $stmt->execute(); 
     return $stmt->fetchAll('assoc'); 
    } 
} 

這工作,因爲它會映射到app_dbdefault連接。

但是,我現在想運行一個查詢,它需要從app_db獲取數據,並且使用users_db的數據連接JOIN。

如何在模型中配置它以便SQL與其他數據庫通信?

回答

0

簡單的方法是,有另一種方法,女巫將改變連接。

public function switchConnection($connection=''){ 
$this->connection = ConnectionManager::get(connection); 
} 

末稱之爲變革連接

MyModel->switchConnection('app_db'); 

下一次運行的getData,它將與app_db而不是默認comunicate。