我想用数据库的数据从CakePhP 2.x设置数据库配置
示例-database.config:
public $bd_test = array (
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'root',
'database' => 'bd_test',
'port' => '5432',
//'encoding' => 'UTF-8'
);
应该看起来像:
$dataFromDb = $this->Model->find('all', array('fields' => array('host', 'login', 'password', 'database', 'port'), 'conditions' => array('database' => 'bd_test')));
public $bd_test = array (
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => $dataFromDb['host'],
'login' => $dataFromDb['login'],
'password' => $dataFromDb['password'],
'database' => $dataFromDb['database'],
'port' => '5432',
//'encoding' => 'UTF-8'
);
类似的。。我想这个想法很清楚,对吧?如果需要更多信息,请告诉我。谢谢。
您应该能够在运行时使用Configure::write('nameofconfigfield,'value');
设置配置数据集如果这不起作用,我很抱歉。我不熟悉CakePHP 2.x,我只使用了3.x
我的回答就像我理解你的问题一样。但我不知道在运行时更改DB连接想要实现什么。
我找到了解决方案:
public function beforeFilter(){
App::uses('ConnectionManager', 'Model');
$databases = $this->YourModel->find('all');
foreach($databases as $valor){
foreach($valor as $value){
$settings = array(
'datasource' => 'Database/Postgres',
'persistent' => false,
'host' => $value['host'],
'login' => $value['user'],
'password' => $value['password'],
'database' => $value['database'],
'port' => $value['port']
);
ConnectionManager::create($value['nome_banco'], $settings);
}
}
}
后来我不得不做setDataSource
,或者你可以用:ConnectionManager::create('default',$settings)替换默认连接;对了:
ConnectionManager::getDataSource('default')->disconnect();
ConnectionManager::drop('default');
ConnectionManager::create('default', $settings);
但我不想同时使用这两种连接。感谢M4R1KU帮助了我。