
在saas中,多租户数据库分库管理时常常需要自定义数据库链接,并且需要支持在框架加载后再调用数据库连接。
Yii2 如何定义数据库连接要注意的是:
即除了使用/Yii::app&#8722>set()外,还需要再多使用下面一句话:/Yii::app->$database->open()
因为在框架加载后再调用时,yii本身并不会帮打开连接。使用如下代码:
<?php/** * User: chenlb */namespace backend/modules/monitorMysql/controllers/showclass 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_IPport=3307dbname='.$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] }}yii2.0 官方提供两个模板先说基本版:
只要修改 config/db.php
<?php
return [
'class' =>'yii\db\Connection',
'dsn' =>'mysql:host=localhostdbname=yii2',
'username' =>'root',
'password' =>'',
'charset' =>'utf8',
'tablePrefix' =>'hpcms_',
]
其中dbname是指数据库名、 host 是主机、 tablePrefix 是表前缀
高级版的也差不多,修改 common/config/main-local.php
配置参数和上述基本一致!
这样就可以链接数据库了(当然你得要启动mysql才可以,如果是其他数据库,请搜索一下,基本都是配置下参数即可)
对于如何 *** 作数据库(增删改查)请看文档ActiveRecord 以及Model (设计表结构后,可以用Gii快速生成Model)
想知道更多的话,看文档最实际
请参考yii2 官网权威指南2.0
数据库访问 (DAO)
$db = new yii\db\Connection(['dsn' => 'mysql:host=localhostdbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
])
// or config in the mian-local.php
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhostdbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)