YII2 API模型数据库连接

时间:2016-02-11 11:40:14

标签: api yii2

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

例如在web应用程序中,如门户网站(我的工作):

在db默认连接中我有

  '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中应用相同\类似的方法。我没有会议。

欢迎任何想法。

2 个答案:

答案 0 :(得分:0)

在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;

答案 1 :(得分:0)

所有请求都使用令牌进行身份验证,这与用户相关联。验证完成后,YII Framework将用户标识分配给\ 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';
}