转自:https://blog.youkuaiyun.com/u012664888/article/details/51869464
在saas中,多租户数据库分库管理时常常需要我们自定义数据库链接,并且需要支持在框架加载后再调用数据库连接。
Yii2 如何定义数据库连接?
要注意的是:
即除了使用\Yii::app−>set()外,还需要再多使用下面一句话:\Yii::app−>set()外,还需要再多使用下面一句话:\Yii::app->$database->open();
因为在框架加载后再调用时,yii本身并不会帮我们打开连接。
<?php
/**
* User: chenlb
*/
namespace backend\modules\monitorMysql\controllers\show;
class AllDatabases extends \yii\base\Action
{
private static $_conn = [];
public function run()
{
// Create Test DB Connection
$db = $this->getDb('数据库名称');
var_dump($db->getSchema()->getTableSchema('log')->columns['id']->isPrimaryKey);
//查询数据
$sql_config = "select * from config where inc_type='shopping' and name='auto_confirm_date'";
$auto_confirm_date = $db->createCommand($sql_config)->queryOne();
var_dump($auto_confirm_date);
exit;
}
/**
* 得到数据库连接
*/
public function getDb($database)
{
if(!isset(self::$_conn[$database])){
$connInfo = [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=HOST_IP;port=3307;dbname='.$database,
'username' => 'username',
'password' => 'password',
'charset' => 'utf8'
];
\Yii::$app->set($database, $connInfo);
\Yii::$app->$database->open();
self::$_conn[$database] = \Yii::$app->$database;
}
return self::$_conn[$database];
}
}
连接上数据库后,就可以使用$db->createCommand($sql_config)->queryOne();查询了。