【问题标题】:How to set database.config infos using an consult from database postgres on CakePHP?如何使用来自 CakePHP 数据库 postgres 的咨询来设置 database.config 信息?
【发布时间】:2016-01-06 11:50:23
【问题描述】:

我想使用来自数据库的数据设置来自 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'
);

类似的东西..我想这个想法很清楚,对吧?如果需要更多信息,请告诉我。谢谢。

【问题讨论】:

    标签: php database postgresql cakephp cakephp-2.0


    【解决方案1】:

    您应该能够在运行时使用Configure::write('nameofconfigfield,'value'); 设置配置数据集 如果这不起作用,我很抱歉。我对 CakePHP 2.x 不熟悉,我只用过 3.x。

    我的回答就像我理解你的问题一样。 但我不知道你想通过在运行时更改数据库连接来实现什么。

    【讨论】:

    • 我想获取那些信息(主机、数据库、端口...)直接在数据库上进行咨询。 (将数据库配置保存在数据库中)。我想检索包含database.config信息的数据。现在明白了吗?
    • 我想我明白了。在 CakePHP 2.x 中,数据库配置不在核心配置文件中,对吧?
    • CakePHP 2.x 将配置保存在 App/Config/Database.config 中
    • 你能用我上面回答的方法编辑配置文件吗?
    • 您能否编辑您的问题并添加您当前的代码,以便我认为可以提供更好的帮助。 :D
    【解决方案2】:

    我找到了解决办法:

     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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      相关资源
      最近更新 更多