2017-02-11 20 views
0

ルーティングによってdb接続(接頭辞)を変更する必要があります site.com/db1/postシステムへのユーザールートがdb1コンポーネントを使用する場合、site.com/db2/postシステムへのルートが使用される場合db2YII2。ルーティングによってdb接続を変更する

'components' => [ 
'db1' => [ 
    ..., 
    'tablePrefix' => 'base1_', 
], 
'db2' => [ 
    ..., 
    'tablePrefix' => 'base2_', 
], 
... 

可能ですか? db接頭辞を変更する方が良い解決策かもしれません。私は

/db1/config/main.php 

に...簡単な解決策は、あなたが別のconfigセクションを持つ2つの異なるアプリケーションを持っている先進的なテンプレート...で似ている別のテーブルと一つのモデルを使用する必要があります(のみプレフィックスの変更)

答えて

0

あなたが別の接頭辞を必要としない2つの別々のデータベースを使用して...。おそらく最も簡単なのはURLルールを使用することです。これは、「DB1」に設定された「デシベル」パラメータを使用してサイト/ポストへDB1 /ポストをリダイレクトしますhttp://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-rules

rules => [ 
    '<db:db\d>/post' => 'site/post', 
] 

を参照してください。次に、あなたのSiteControllerに:答えFOT

private static $_db; 

public static function getDb() { 
    if (isset(self::$_db)) { 
     return self::$_db; 
    } 
    return ActiveRecord::getDb(); 
} 

public static function setDb($db) { 
    self::$_db = $db; 
} 
+0

ありがとう:あなたのモデルクラスで

public function actionPost($db) { YourModel::setDb(Yii::$app->$db); $model = new YourModel(); // do what you need with your model // and return the rendered result } 

は、あなたがgetDb()静的メソッドをオーバーライドし、setDbメソッドを記述する必要があります! コントローラが多すぎるのを忘れてしまった。 私は別の方法で変更するユーザーを使用し、すべてのユーザーに対してdb接続を行います。 –

0

'components' => [ 
    'db' => [ 
..., 
    'tablePrefix' => 'base1_', 
    ], 

では、あなたが好むテーブルプレフィックスにアクセスするためのsetted DBコンポーネントを配置することができます(または、データベースにあなたが好みます)
/db2/config/main.php 

'components' => [ 
    'db' => [ 
..., 
    'tablePrefix' => 'base2_', 
    ], 
あなたが必要なすべての一般的なアプリケーションのelemntsのための共通の名前空間を使用することができます

...モデル、コントローラ、ビューと..だから
および特定の要素のための各reseved名前空間..に

Obviuoslyこれは提案をisjust ...簡単に他人とスマートなソリューション

がある可能性が

PS:オプションがいくつかあります

関連する問題