我需要通过路由更改数据库连接(前缀), 当用户路由到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前缀。 我需要使用一个具有不同表格的模型(仅前缀更改)
答案 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;
}