【问题标题】:CakePHP how to assign database connection dynamicallyCakePHP如何动态分配数据库连接
【发布时间】:2014-02-06 07:50:45
【问题描述】:

我有一个名为 CLIENT_URL 的常量值

关于助推器:

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

我已经调试过了,例如,'client1' 或 'client2' 等。 我在定义配置数组的时候需要用到那个值,比如:

关于数据库.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'),它只是不切换。 我通过查找检查数据库,它总是从同一个数据库返回相同的记录,没有开关。

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

感谢您的任何指点。

【问题讨论】:

    标签: php cakephp configuration constants


    【解决方案1】:

    你需要这样做

    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;
    }
    
    };    
    

    【讨论】:

    • 谢谢@Moyed Ansari。但是,数据库保持不变,请参阅编辑。
    • 您可以在最后一行之后调试 $this->default 以查看更改。其次,您使用的是相同的连接吗?
    • 我刚刚调试,它不会显示更改;我有不同的数据库来测试检索到的记录。请参阅编辑。你有什么建议?谢谢。
    • 尝试调试 debug($this->default['database']);
    • 谢谢。我在分配之前和之后调试了 $this->default['database'] 并且它保持不变。请参阅编辑。我快没希望了;-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多