[英]Cakephp switch database connection in controller for CakePHP 2.2.5
我試圖從控制器中的兩個不同的數據庫中獲取數據
應用程序/控制器/ UsersController.php
我的數據庫連接在database.php中聲明
$default = array(
...
'database' => 'test'
...
);
$test = array(
...
'database' => 'test1'
...
);
並在我的display()
動作中:
public function display() {
$this->set('defaultUsers', $this->User->find('all'));
$this->User->schemaName = 'test1';
$this->User->cacheQueries = false;
$this->set('testUsers', $this->User->find('all'));
}
這將允許我成功地從兩個不同的源獲取數據,但問題是這兩個數據庫必須具有相同的密碼,否則它將無法工作。
我嘗試過在這里和其他網站找到的其他解決方案。 喜歡:
更改$this->User->useDbConfig = 'test'
和$this->User->cacheQueries = false
仍會給我相同的數據集;
使用ConnectionManager::getDataSource()
和setConfig()
, create()
, drop()
, setDataSource()
等。這些都不起作用,有些甚至不再存在。
任何幫助將不勝感激! 因為我需要為兩個類似的應用程序(即兩個數據庫)使用相同的代碼庫。
謝謝!
您可能需要使用'setDataSource()'來切換數據源/連接,因為這將重置模型上的'緩存'模式等;
public function display() {
$this->set('defaultUsers', $this->User->find('all'));
$this->User->setDataSource('test1');
$this->set('testUsers', $this->User->find('all'));
}
如果需要在整個應用程序中訪問兩個數據庫中的數據,另一個選項是創建兩個用戶模型,一個用'test'作為數據源,另一個用'test1'作為數據源。 這樣您就不必一直切換數據源
例:
class TestUser extends AppModel {
public $useTable = 'users'; // name of the database table
public $useDbConfig = 'test1'; // name of the database configuration in database.php
}
另請注意:'$ test'database-config是預先配置的數據庫連接,用於運行CakePHP單元測試。 您可以考慮創建自己的數據庫連接名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.