2012-12-27 69 views
0

我正在使用ActiveRecord,我需要切換數據庫。當我登錄時,我選擇一個數據庫。 數據庫是相同的模式。 我試過了:交換數據庫php activerecord

$connections = array(
    '1' => 'mysql://root:[email protected]/db1;charset=utf8', 
    '2' => 'mysql://root:[email protected]/db2;charset=utf8', 
    'test' => 'mysql://root:[email protected]/database_name' 
); 

$current_db = $_SESSION['db'] ? $_SESSION['db'] : '2'; 


ActiveRecord\Config::initialize(function($cfg) use ($connections, $current_db) 
{ 
    $cfg->set_model_directory(MODEL_PATH); 
    $cfg->set_connections($connections); 

    $cfg->set_default_connection($current_db); 
}); 

db'2'是默認值。但不起作用。

+0

你會得到什麼樣的錯誤? –

+0

沒有錯誤。問題是,即使$ current_db取任何值都不會改變數據庫。 –

+1

你在這裏發佈的代碼看起來不錯,它必須是別的東西(設置其他地方的連接,某些值在$ _SESSION ['db']等) –

回答

0

我一般使用這樣的方法;

$all = new SomeModel(); // class of ActiveRecord\Model 
$all->table()->class->setStaticPropertyValue("connection","test"); //test - defined in cfg 
$all->table()->reestablish_connection(); 
//then use it as usual. 
$all_data = $all->all(); 
+0

我的ActiveRecord拋出異常,說reestablish_connection()沒有定義。 –

0

我找到了一個很好的解決方案的鏈接交換數據庫here

編輯: 我在我的模型

public static function switch_connection($name) { 

    $cfg = ActiveRecord\Config::instance();  
    $valid = $cfg->get_connections(); 
    if (! isset($valid[$name])) { 
     throw new ActiveRecord\DatabaseException('Invalid connection specified'); 
    } 

    // Get the name of the current connection 
    $old = self::$connection; 

    $cm = ActiveRecord\ConnectionManager::instance(); 
    $conn = $cm::get_connection($name); 
    static::table()->conn = $conn; 

    return $old; 
    } 

定義了一個名爲switch_connection方法如果您在鏈接中看到請注意,我添加了static關鍵字。我認爲這是個好主意。

+0

請注意,您應該在此處發佈答案的有用觀點,或將您的帖子風險刪除爲[「未回答」](http://meta.stackexchange.com/q/8259)。如果您願意,您可能仍然包含鏈接,但僅作爲「參考」。答案應該獨立,不需要鏈接。 –