2
我試圖動態地移動到另一個數據庫。我看到了幾個問題,顯示了從一個到另一個更改db文件,他們只是從下一個數據庫獲取一些信息。但我需要的是完全轉向第二個數據庫。我應該怎麼做?我已經看到,爲了實現這個dsn(在db.php文件中)應該被修改。但我改變了它,它仍然沒有改變?我應該完全訪問第一個關閉的第二個數據庫。請給我建議yii2動態更改數據庫
我試圖動態地移動到另一個數據庫。我看到了幾個問題,顯示了從一個到另一個更改db文件,他們只是從下一個數據庫獲取一些信息。但我需要的是完全轉向第二個數據庫。我應該怎麼做?我已經看到,爲了實現這個dsn(在db.php文件中)應該被修改。但我改變了它,它仍然沒有改變?我應該完全訪問第一個關閉的第二個數據庫。請給我建議yii2動態更改數據庫
類似db.php
的配置文件不打算在進程中進行更改(而PHP正在處理中)。當請求進入框架時,它們在初始化時加載一次。 作爲替代方案,您可以配置第二DB事先在db.php
,並動態地將它們之間進行切換,如:
Yii::$app->db // your default Database
和
Yii::$app->db2 // Second configured Database, to which you can switch dynamically later
您可以瞭解multiple database connections here
所以,如果你想ActiveRecord(例如User)能夠訪問兩個數據庫,您可以定義一些靜態變量,它指定從哪個數據庫讀/寫。例如:
class User extends \yii\db\ActiveRecord
{
const DB_DATABASE1 = 'db1';
const DB_DATABASE2 = 'db2';
private static $db = self::DB_DATABASE1;
public static function setDb($db)
{
self::$db = $db;
}
public static function getDb()
{
switch (self::$db) {
case self::DB_DATABASE1:
return Yii::$app->db;
case self::DB_DATABASE2:
return Yii::$app->db2;
default:
throw new \Exception("Database is not selected");
}
}
//...
然後在控制器這樣使用它:
User::setDb(User::DB_DATABASE1);
$usersDB1 = User::find()->all();
User::setDb(User::DB_DATABASE2);
$usersDB2 = User::find()->all();
我同意這種做法,您應該建立預配置的分貝CONFIGS,但在技術上你可以動態改變任何組件的配置 - 如果你做得不對,你只是冒着弄髒事情的風險,否則就取決於那個組件。我主要提到這個情況,你可能提前不知道備用數據庫規格。 – ldg