Yii2 如何定义数据库连接

2025-03-03 17:56:02
推荐回答(1个)
回答1:

在saas中,多租户数据库分库管理时常常需要我们自定义数据库链接,并且需要支持在框架加载后再调用数据库连接。
Yii2 如何定义数据库连接?
要注意的是:
即除了使用\Yii::app−>set()外,还需要再多使用下面一句话:\Yii:: app−>set()外,还需要再多使用下面一句话:\Yii::app->$database->open();
因为在框架加载后再调用时,yii本身并不会帮我们打开连接。
* 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); 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];
}
}