簡體   English   中英

CakePHP在CakePHP 2.2.5控制器中切換數據庫連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM