我在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中应用相同\类似的方法。我没有会议。
欢迎任何想法。
答案 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';
}