如何在CakePHP上使用来自数据库postgres的咨询来设置database.config信息


How to set database.config infos using an consult from database postgres on CakePHP?

我想用数据库的数据从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帮助了我。