我们正在使用 Yii2 建立一个多租户网站。我们希望允许每个用户在使用相同的系统时拥有自己的数据库。我们还将拥有一个系统数据库,用于保存用户信息和发票等信息。
以下是我们的一些问题。
- 我们如何根据存储在第一个数据库连接 (db) 中的信息使第二个数据库连接 (db2) 动态化?
- 我们如何设置迁移以应用于所有租户数据库 (db2) 的动态?
- 我们如何在初始迁移时定位一个动态数据库?
有一些链接有所帮助,但尚未回答我们的所有问题。
多个数据库连接和 Yii 2.0
http://www.yiiframework.com/doc-2.0/guide-db-migrations.html
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 控制器。在控制台中,您可以创建 migrationController.php它扩展了 Yii2 控制器,而不是调用php yii migrate/up
您将调用 php yii migration/up
。
您还可以欺骗系统使用您自己的 MigrateControllor,以便您仍然可以使用 php yii migrate/up
,请尝试使用 URL 规则来执行此操作。我看到一个人以另一种方式做,但我找不到位置。
3) 如果您创建了自己的迁移控制器(请参阅数字 2),则只需向迁移命令添加参数即可。现在它可以接收--migration-path
和--db
等参数,添加您自己的参数以执行所需的操作。