YII2。通过路由更改数据库连接

时间:2017-02-11 20:53:22

标签: database yii2 prefix

我需要通过路由更改数据库连接(前缀), 当用户路由到site.com/db1/post系统时使用了db1组件配置,并且当路由到site.com/db2/post系统时使用了db2

var bottomSection = document.getElementById("bottomSection");

bottomSection.addEventListener("mouseover", function() {
bottomSection.textContent = '';
bottomSection.style.padding = '';
});

可以吗? 也许有更好的解决方案来改变db前缀。 我需要使用一个具有不同表格的模型(仅前缀更改)

2 个答案:

答案 0 :(得分:0)

一个简单的解决方案类似于高级模板..你有两个不同的应用程序,具有不同的配置部分..在

/db1/config/main.php  

您可以将数据库组件设置为访问您喜欢的表前缀(或者也可以是您喜欢的数据库)

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

并在

  /db2/config/main.php  

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

您可以为所需的所有常见应用程序元素使用通用命名空间..模型,控制器,视图等... on
以及特定元素的每个重新命名的命名空间..

显然这只是一个建议......可能还有其他简单明智的解决方案

PS:使用两个独立的数据库,您不需要不同的前缀..

答案 1 :(得分:0)

有几种选择。可能最简单的是使用网址规则;见http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-rules

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

这将使用&#34; db&#34;将db1 / post重定向到site / post。参数设置为&#34; db1&#34;。然后在你的SiteController中:

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方法:

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