多租户多数据库设置

时间:2015-01-21 19:33:37

标签: php mysql yii2 saas

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

以下是我们的一些问题。

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

  4. 有一些链接有帮助,但没有回答我们的所有问题。

    Multiple database connections and Yii 2.0

    http://www.yiiframework.com/doc-2.0/guide-db-migrations.html

1 个答案:

答案 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等参数,添加您自己的参数以执行您需要的操作。