多租户多数据库设置


Multi Tenant Multiple Database Setup

我们正在使用 Yii2 建立一个多租户网站。我们希望允许每个用户在使用相同的系统时拥有自己的数据库。我们还将拥有一个系统数据库,用于保存用户信息和发票等信息。

以下是我们的一些问题。

  1. 我们如何根据存储在第一个数据库连接 (db) 中的信息使第二个数据库连接 (db2) 动态化?
  2. 我们如何设置迁移以应用于所有租户数据库 (db2) 的动态?
  3. 我们如何在初始迁移时定位一个动态数据库?

有一些链接有所帮助,但尚未回答我们的所有问题。

多个数据库连接和 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等参数,添加您自己的参数以执行所需的操作。