CakePHP如何动态分配数据库连接

时间:2014-02-06 07:50:46

标签: php cakephp configuration constants

我有一个名为CLIENT_URL的常量值

关于boostrap:

$clienturl = explode('/', $_SERVER['REQUEST_URI']);
define("CLIENT_URL",$clienturl[2]);

我已经调试过它,例如,'client1'或'client2'等。 我需要在定义配置数组时使用该值,例如:

在database.php上

class DATABASE_CONFIG {

var $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => '*****',
    'password' => '****',
    'database' => 'client3',
    'prefix' => ''
 );    

var $clientdb = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => '****',
    'password' => '****',
    'database' => 'client3',
    'prefix' => ''
);

public function __construct() {
    debug('constant value: '.CLIENT_URL);
    debug($this->default['database']); 
    $this->default['database'] = CLIENT_URL; // This line does nothing !!
    //$this->clientdb['database'] = CLIENT_URL; // This lines prevent connection, error: Database connection "Mysql" is missing, or could not be created !!
    $this->default = $this->clientdb;
    debug($this->default['database']); 

}
};

但是,数据库保持不变,它保留了上面的初始值。 其实我可以这样做:

$this->default['database'] = 'whatever';

它甚至不会尝试找到'无论'数据库;看来这个任务是缺少一些重载还是什么?

在__construct上分配后,

我已经调试了

debug($this->default['database']); 

在作业之前和之后,它不会改变。 它只会改变这样做:

$this->clientdb['database'] = CLIENT_URL; // Instead of $this->default['database'] = CLIENT_URL;

然后连接失败。

请注意应用程序确实连接到最初给出的数据库('client3'),它只是不切换。 我通过find检查数据库,它始终从同一个数据库返回相同的记录,没有切换。

$options = array('conditions' => array('User.id' => 1));
$clientArray = $this->User->find('first', $options);

感谢您的任何指示。

1 个答案:

答案 0 :(得分:0)

你需要这样做

class DATABASE_CONFIG {

var $client1db = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => '*****',
    'password' => '*****',
    'database' => 'client1',    
    'prefix' => ''
);


public function __construct() {
    $this->default = $this->clientdb;
    $this->default['database'] = CLIENT_URL;
}

};