【问题标题】:YII2 API Model Database ConnectionYII2 API 模型数据库连接
【发布时间】:2016-02-11 11:40:14
【问题描述】:

我正在 YII2 中开发一个包含多个数据库的 API。我想实时选择数据库。这个想法是读取控制器中可用的一个变量(API 密钥)来识别模型中的正确连接数据库。

例如,在我拥有的门户网站之类的 web 应用程序中(它有效):

在数据库默认连接中我有

  'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=dbcompany_0',
            'username' => 'root',
            'password' => 'XXXXXXXXXXXXXXXXXXXX',
            'charset' => 'utf8',
        ],

在模型中我有

public function tableName()
    {
            $schema = '';

            $user = User::find(Yii::app()->user->id);
            $schema = "dbcompany_".  $user->CompanyId;
            return $schema . '.' . 'customer';
    }

通过这种方法,我只需为所有数据库公司建立一个数据库连接。

如何在 API 中应用相同\类似的方法。我没有会话。

欢迎任何想法。

【问题讨论】:

    标签: api yii2


    【解决方案1】:

    在db下新建一个组件为:

     'db1' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=dbcompany_0',
                'username' => 'root',
                'password' => 'XXXXXXXXXXXXXXXXXXXX',
                'charset' => 'utf8',
            ],
     'db2' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=localhost;dbname=dbcompany_0',
                'username' => 'root',
                'password' => 'XXXXXXXXXXXXXXXXXXXX',
                'charset' => 'utf8',
            ],
    

    并将其用作:

    Yii::$app->db1 
    Yii::$app->db2;
    

    【讨论】:

    • 谢谢。我知道这种可能性,但我想要的是动态的 dbname 参数。因为我有 40 个数据库作为示例。我不会创建 40 个组件等等。如何在控制器中设置正确的数据库连接?
    • 我认为这会给出提示。` Yii::$app->db->dsn = $appConnection->dsn;
    【解决方案2】:

    所有请求都使用令牌进行身份验证,并且与用户相关联。验证完成后,YII 框架将用户 ID 分配给 \Yii::$app->user->identity->id。因此,我可以从任何地方识别模型中的公司所有者。

    public static function tableName(){
                $moreinfo= account\Userextra::findOne(\Yii::$app->user->identity->id);
                $schema = \Yii::$app->params['table.prefix'] . $moreinfo->CompanyId;
                return $schema . '.country';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 2017-11-09
      • 2015-11-02
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多