【问题标题】:How to create Saas application in yii2 with Separate db connections如何在 yii2 中使用单独的数据库连接创建 Saas 应用程序
【发布时间】:2020-01-14 08:22:08
【问题描述】:

我正在使用 Yii2 开发 SaaS 应用程序。我在设置数据库连接时遇到问题。我为每个租户使用单独的数据库结构。我有一份包含租户公司、用户名和密码的登录表格。使用公司名称我需要获取为相关租户创建的数据库名称、数据库用户名和数据库密码并建立数据库连接。然后需要使用输入的用户名和密码验证登录。

我尝试了以下示例。 https://forum.yiiframework.com/t/change-db-connection-dynamically/76412

但它会在登录后设置数据库连接,并验证了来自公共数据库连接的登录。我需要验证来自租户数据库的连接,

如何获得以上系统要求的成功输出?

【问题讨论】:

    标签: php database authentication yii2 saas


    【解决方案1】:

    我认为你应该根据功能调用特定的数据库所以你需要在你的 yii 中配置多个数据库

        you need to add database configuration in common/config/main-local.php 
    
        <?php
        return [
            'components' => [
                'db' => [
                    'class' => 'yii\db\Connection',
                    'dsn' => 'mysql:host=localhost;dbname= FIRST DATABASE NAME',
                    'username' => USER NAME,
                    'password' => PASSWORD,
                    'charset' => 'utf8',
                ],
                'db1' => [
                    'class' => 'yii\db\Connection',
                    'dsn' => 'mysql:host=localhost;dbname= SECOND DATABASE NAME',
                    'username' => USER NAME,
                    'password' => PASSWORD,
                    'charset' => 'utf8',
                ]
            ],
        ];
    

    ?>

       // code for your project's components file
        //use Yii; use this is your class file 
    
        // this is only for select query you can update for update ,delete and insert as well
    
        // $query : wrire your query like 'SELECT * from test'
    
        // $dbname : from which db you want to execute given query like (db OR db1)
    
    
    
        public function execute($query,$dbName)
        {
            $connection = Yii::$app->get($dbName);
            $command = $connection->createCommand($query);
            $response = $command->queryAll();
            return $response;
        }
    

    【讨论】:

    • 这里的租户多于两个。所以数据库连接需要动态改变。
    • 好的,您可以根据需要添加数据库,我希望您知道,何时以及要使用哪个数据库,因此只需传递查询和数据库名称(db,db1,因为我已经提到)在执行功能(已经提供)
    • 相关数据库需要从common db中选择输入的公司名称。然后只有我可以传递数据库名称。从新的数据库连接我需要登录
    • 请帮帮我,我需要从租户数据库登录,由租户 id 更改
    • 表示你没有所有数据库登录?
    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2012-04-13
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多