2017-02-11 101 views
0

我需要更改路由数据库连接(前缀)更改数据库连接, 当用户路线site.com/db1/post系统中使用DB1组件的配置,并在路线site.com/db2/post使用的系统db2YII2。通过路由

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

可以吗? 也许有更好的解决办法来改变分贝前缀。 我需要使用一个模型,不同的表(只前缀的变化)

回答

0

有几个选项。可能最简单的是使用url规则;看到http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-rules

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

这将DB1 /后重定向到网站/后以及 “db” 参数设置为 “DB1”。然后在您的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; 
} 
+0

感谢FOT答案! 我忘了,我有太多的控制器。 我通过改变用户使用其他的方式,为每个用户做你的数据库连接。 –

0

一个简单的解决方案是在先进的模板..,你有不同的配置部分的两个不同的应用程序类似。在

/db1/config/main.php 

你可以把设置好的访问到你喜欢的表前缀的数据库组件(或者还数据库您喜欢)

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

/db2/config/main.php 

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

您可以使用常见的命名空间,所有你需要的常见应用elemnts ..模式,控制器,视图等..上
和特定元素的每个命名空间有限公司Reseved ..

Obviuosly这isjust建议..可能是有其他人很容易和智能解决方案

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