В настоящее время я работаю над проектом, для которого мы выбрали Yii в качестве нового фреймворка. В настоящее время я пытаюсь найти лучший способ реализовать в Yii автоматическое переключение базы данных при сбое.
В настоящее время я пытаюсь переопределить класс CDbConnection - функция Open. Однако я не уверен, что иду в правильном направлении.
В основном то, что я хочу сделать, - это проверить соединение с БД, и если оно не может подключиться к другой БД. Простая концепция. Я просто не знаю, куда ее девать. Я знаю, что есть более эффективные способы сделать это с помощью mysqlnd_ms, но он еще не настроен на серверах, которые мы используем, поэтому нужно придумать способ сделать это в Yii. Любая помощь приветствуется. -DA
Это то, что у меня есть до сих пор Мысли?
class DaDbConnection extends CDbConnection{
public $dbConnectTries = 6;
public $numDatabases = 3;
private $_tries =0;
private $_db = 1;
/*
* Extends CDbConnection open() method
* Tries to connect to database connections setup in config/main.php up to
* the value of $dbConnectionTries or a connection is successful
* @throws CException If it can not connect to any DBs
*/
protected function open()
{
try{
//try to connect to the default DB
parent::open();
}catch(Exception $e){
if($this->_tries < $this->dbConnectTries){
//If there aren't anymore DBs to try we must start over from the first
if($this->_db >= $this->numDatabases){
$tryDb = 'db';
$this->_db = 0;
}else{
$tryDb = 'db'.$this->_db;
}
$this->_db++;
$this->_tries++;
$this->connectionString = Yii::app()->$tryDb->connectionString;
$this->username = Yii::app()->$tryDb->username;
$this->password = Yii::app()->$tryDb->password;
$this->open();
}else{
throw new CDbException('Could Not Connect to a DB.');
}
}
}
}