我们正在使用Yii2建立一个多租户网站。我们希望允许每个用户在使用相同系统时拥有自己的数据库。我们还有一个系统数据库,用于保存用户信息和信息,如发票。
以下是我们的一些问题。
有一些链接有帮助,但没有回答我们的所有问题。
Multiple database connections and Yii 2.0
http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
答案 0 :(得分:3)
1)这完全取决于你如何设置它。你怎么会记得用户使用什么数据库?你可以随时做点什么
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,...
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => function() use ($whatever, $variables, $you, $need) {
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=' . GETTHEDATABASEINAWAY,
'username' => GETTHEUSERINAWAY,
'password' => GETTHEPASSINAWAY,
],
}
],
];
有关匿名函数的更多信息http://php.net/manual/en/functions.anonymous.php
2)你可能在某个地方有一个数据库列表。创建自己的迁移控制器,扩展主要的迁移控制器,您可以调用它来迁移而不是普通的yii 2控制器。
在控制台中,您可以创建扩展Yii2的migrationController.php,而不是调用php yii migrate/up
,您将调用php yii migration/up
。
您还可以欺骗系统使用您自己的MigrateControllor,这样您仍然可以使用php yii migrate/up
,尝试使用URL规则来执行此操作。我看到一个人以另一种方式做这件事,但我找不到位置。
3)如果您创建自己的迁移控制器(请参阅数字2),则只需向migration命令添加参数即可。现在,它可以接收--migration-path
和--db
等参数,添加您自己的参数以执行您需要的操作。